Knowledge Log

【Java】いつ終わるかわからない?「while文」で条件に合うまで繰り返そう!

denson
1

はじめに

みなさんどうも、おげんです。

前回は、指定した回数だけきっちり繰り返す「for文」について学びました。

「10回スクワットする!」といった、ゴールが最初から見えている時には最強の武器でしたね。

でも、プログラミングをしていると、こんな場面に出くわすことがあります。

  • 「敵のHPが0になるまで攻撃し続ける」
  • 「正解のパスワードが入力されるまで、入力を求め続ける」
  • 「お腹がいっぱいになるまで食べ続ける」

これらに共通するのは、「何回繰り返せば終わるのか、最初からはわからない」ということです。

「敵がいつ倒れるかなんて、やってみないとわからないよ!」

そんな、回数ではなく「状態」で繰り返しをコントロールしたい時に登場するのが、今回紹介する 「while(ホワイル)文」 です。

for文が「きっちり派」なら、while文は「粘り強派」。

この2つを使い分けられるようになると、あなたのプログラムはより柔軟で、より実戦的な動きができるようになります。

今回は、そんなwhile文の基本と、for文との賢い使い分けについて、解説していきます!

この記事はこんな人におすすめ!
  • 「回数が決まっていない繰り返し」をどう書けばいいか迷っている人
  • for文とwhile文、どっちを使えばいいのか基準を知りたい人
  • ゲームのような「イベントが発生するまで続く処理」を作りたい人
2

while文の基本形

while文の書き方は、実はif文とそっくりです。

while (条件式) {
    // 条件が「true」の間、ずっと繰り返したい処理
}

「while」は英語で「〜の間じゅう」という意味。

つまり、カッコの中の条件が満たされている(true)間は、Java君が「まだ終わっちゃダメだ!」と、中の処理をひたすらループし続けます。

実際のコードで見てみよう

例えば、「お腹がいっぱいになるまで(満腹度が100未満の間)食べる」という処理を書いてみると、こんな感じです。

int stomachFull = 0; // 現在の満腹度

while (stomachFull < 100) {
    System.out.println("もぐもぐ…現在の満腹度:" + stomachFull);
    stomachFull += 20; // 20ずつ増えていく
}

System.out.println("お腹いっぱい!ごちそうさまでした。");
ここがポイント!
  • シンプルさ:for文の様にカッコの中に「初期化」や「変化」を詰め込みません。
  • 自由度:カッコの中には「条件」だけを書けばOK。
3

for文 vs while文:どっちを使う?

「どっちも『繰り返し』なら、全部for文(またはwhile文)でいいんじゃない?」

そう思うかもしれませんが、エンジニアは状況に合わせてこの2つを賢く使い分けています。

その判断基準はズバリ、「回数が最初から決まっているかどうか」です。

1. 回数指定なら「for文」

  • 例: 腹筋を30回やる
  • イメージ: 回数券を1枚ずつ使っていく感じ
  • Java君への指示: 「1から始めて、1回ずつ増やして、30回になったら止めてね」

「あと何回」が明確なときは、カウントが得意なfor文の出番です。

2. 条件指定なら「while文」

  • 例: 限界が来るまで腹筋をやる
  • イメージ: タイマーを見ずに、体力が尽きるまで続ける感じ
  • Java君への指示: 「『まだ限界じゃない』という状態である限り、ずっと続けてね」

「いつ終わるか予想がつかないけれど、ある条件を満たしたら止めたい」ときは、粘り強いwhile文の独壇場です。

現場での使い分けのコツ

実務では、以下のような使い分けがよく見られます。

  • for文: 1週間の曜日(7回)を処理する、リストに入った10件のデータを全部表示する、など。
  • while文: ユーザーが「終了ボタン」を押すまで待つ、正しいデータが入力されるまでやり直させる、など。

数字で数えられるならfor、状態で決まるならwhile」と覚えておけば、まずは間違いありません。

最初は迷うかもしれませんが、コードを書いていくうちに「あ、ここはwhileの方がスッキリ書けるな」という感覚が自然と身についてきますよ!

私も転職活動の面接でこの違いについて問われました、ぜひ覚えておいてくださいね。

4

while文で絶対に忘れてはいけないこと

while文を使うとき、絶対に、何があっても忘れてはいけないルールが1つだけあります。

それは、「いつか必ず『条件がfalse』になるように、中身で仕掛けを作ること」です。

恐怖の「永遠に終わらないスクワット」

例えば、こんなコードを書いてしまったとします。

int energy = 100;

while (energy > 0) {
    System.out.println("スクワット継続中!");
    // ここでenergyを減らすのを忘れた!
}

Java君はこう考えます。

「えーっと、energyは100だから、0より大きい(true)ね。よし実行!」

「次も、energyは100だね。よし実行!」

これ、永遠に終わりません。前回のfor文でも紹介した「無限ループ」の完成です。

無限ループを防ぐ「出口の鍵」

while文を書くときは、処理の最後に必ず「条件を動かす一行」をセットで書く癖をつけましょう。

while (energy > 0) {
    System.out.println("スクワット継続中!");
    energy -= 10; // ← これが「出口の鍵」!
}

while文はfor文よりもシンプルで書きやすい分、この「出口の鍵」をうっかり書き忘れるミスが本当に多いんです。

while文を書くときは「まず while () { } を書いて、その中の一番下に脱出用のコード(i++flag = false など)を真っ先に書き込む」にするのがいいですね。

5

おまけ:とりあえず1回!「do-while文」

while文には、実はちょっと変わった兄弟がいます。

それが 「do-while(ドゥ・ホワイル)文」 です。

普通のwhile文は、最初に「条件に合ってるかな?」と確認してから処理に入ります。でも、do-while文は違います。

do {
    // とりあえず1回は実行する!
} while (条件式); // 最後に確認

「まずは動け!」の精神

do-while文の最大の特徴は、「条件がどうであれ、最初の1回は必ず実行される」 ということです。

例えば、「雨が降っていたら散歩に行かない」というルールがあるとします。

  • while文:外を見て、雨なら一歩も出ない。
  • do-while文:とりあえず外に飛び出してみて、そこで「あ、雨だ」と気づいて家に戻る。

どんな時に使うの?

一番わかりやすいのは 「ユーザーに何かを入力してもらう時」 です。

  1. まず、入力画面を出す(1回目)。
  2. 入力された内容が間違っていたら、もう一度繰り返す。

「まずは1回やらせてみて、ダメだったらもう1回!」という流れの時には、このdo-while文がピッタリなんです。

⚠️ セミコロンに注意!

ここ、初心者(と試験を受ける人)が一番間違えるポイントなのですが、do-while文の最後には ;(セミコロン) が必要です。

} while (条件式); // ここにセミコロンを忘れずに!

普通のwhile文にはいらないのに、do-whileには必要。

これもJava君のちょっとしたワガママだと思って、セットで覚えてあげてくださいね(笑)。

6

まとめ:粘り強いwhile文を味方にしよう

今回は、条件が満たされるまで繰り返す「while文」について解説しました。

  • while文は「回数が決まっていない時」の強い味方。
  • 「数字で数えるならfor、状態で決まるならwhile」が使い分けの基本。
  • 無限ループを防ぐために、処理の中に必ず「出口の鍵」を用意すること。
  • とりあえず1回実行したい時は、兄弟分の「do-while文」の出番。

プログラミングを始めたばかりの頃は、「全部for文で書けそうだけど、なんでwhile文なんてあるんだろう?」と不思議に思うかもしれません。

でも、ゲームの「敵を倒すまで」や、Webアプリの「ログインに成功するまで」といったリアルな仕組みを作ろうとすると、このwhile文の「粘り強さ」がなくてはならないものだと気づくはずです。

for文(きっちり派)とwhile文(粘り強派)。 この2つの武器を状況に合わせて使い分けられるようになれば、あなたのコードはもっとプロっぽく、そして賢くなります!

今回も最後まで読んでいただき、ありがとうございました。 「繰り返し」をマスターすれば、Java君にどんどん仕事を任せられるようになりますよ。

いっぽずつ、一緒に進んでいきましょう!

ABOUT ME
おげん
おげん
駆け出しエンジニア
文系未経験からエンジニアになるために挑戦を開始したアラサー。転職活動を終え、2026年4月からIT企業で勤務予定。自分が学習で苦労した経験を『誰かのための道しるべ』として発信中。
記事URLをコピーしました