6日でできる 新Java入門|制御文① whileループ

繰り返しの型を覚えると、Javaの動きはぐっと力強くなる。whileループを身につけて、同じ処理を自在に操ろう

Javaのプログラムは、基本的には上から下へ順番に処理が進んでいきます。けれど、実際のプログラムでは、同じ処理を何回もくり返したい場面がたくさんあります。たとえば、技の一覧を順番に表示したいとき、修行回数を数えながらメッセージを出したいとき、条件を満たしている間だけ何かを続けたいときです。そうした 処理の流れ をコントロールするために使うのが 制御文 です。

ドラゴンボールの世界でたとえるなら、制御文は修行の進行を管理するルールのようなものです。気をためる、型を確認する、もう一度くり返す、条件を満たしたら次の段階へ進む。このような流れを、ただ一度きりで終わらせるのではなく、必要な回数だけ正しく反復するための型が必要になります。while文は、その中でも 基本の繰り返し型 としてとても重要です。

while文は、条件が true の間、同じ処理を何度も実行する構文です。条件が true なら続き、false になったら止まる、というシンプルな仕組みですが、この考え方は今後の for文 や do-while文、さらにもっと複雑な繰り返し処理を理解する土台にもなります。この記事では、while文の書き方、配列と組み合わせた使い方、ループカウンタの考え方、そして do-while文 との違いまで、ドラゴンボール風の修行の流れに置き換えながら、しっかり整理していきます。

制御文とは何か

制御文とは、プログラムの実行の流れを調整するための構文です。通常、Javaの文は上から順番に実行されますが、それだけでは柔軟なプログラムは作れません。そこで、条件によって分岐したり、同じ処理をくり返したりする仕組みが必要になります。

ドラゴンボール風に言えば、これは修行メニューの進行表のようなものです。基本動作を1回だけ行うのではなく、気が整うまで続ける、全技を順番に確認する、条件を満たしたら次に進む、という流れを指示する役割があります。

制御文が必要になる場面

場面何をしたいか
条件分岐状況によって違う処理を行いたい
繰り返し同じ処理を何度も行いたい
スキップや終了条件によって途中で流れを変えたい

今回の主役である while文 は、この中でも 繰り返し に関わる代表的な制御文です。

while文の基本

while文は、条件式が true の間、ブロック内の処理をくり返し実行します。条件が false になると、その時点でループを終了します。

while文の基本構文

while (条件式) {
    // 繰り返す処理
}

この形はとても大切です。見た目はシンプルですが、Javaの繰り返し処理の基本が詰まっています。

while文の動き

構成要素内容
while繰り返しを始めるキーワード
条件式ループを続けるかどうかを判定する
ブロック条件が true の間くり返される処理

while文では、まず条件式を確認します。その結果が true ならブロックの中を実行します。ブロックの実行が終わると、もう一度条件式を確認し、true なら再び実行、false なら終了します。

ドラゴンボール風にたとえるなら、修行係が まだ条件を満たしているか を毎回確認し、満たしている間だけ同じ型稽古を続けさせるような流れです。

while文で大事な考え方

while文を使うときに大切なのは、条件式と、ループの中で変化する値をきちんとセットで考えることです。条件だけ書いても、その条件がずっと true のままだと終わりません。逆に、最初から false なら一度も実行されません。

while文で意識したいこと

項目内容
開始値どこから始めるか
条件式いつまで続けるか
更新処理どうやって次へ進めるか

この3つは、while文を理解するうえでとても重要です。ドラゴンボール風に言えば、何回目の修行から始めるか、何回目まで続けるか、1回終わるごとに次の段階へどう進むか、ということです。

配列の内容を while文で順番に表示する

まずは、配列の要素を先頭から順番に表示する例を見てみます。

ファイル名:Lesson08_1.java

public class Lesson08_1 {
    public static void main(String[] args) {
        String[] techniques = {"気をためる", "構えを整える", "正拳突きをくり返す", "深呼吸で集中する"};
        int index = 0;
        int displayNum;

        while (index < techniques.length) {
            displayNum = index + 1;
            System.out.println(displayNum + "番目の技: " + techniques[index]);
            index++;
        }
    }
}

実行結果

1番目の技: 気をためる
2番目の技: 構えを整える
3番目の技: 正拳突きをくり返す
4番目の技: 深呼吸で集中する

このプログラムでは、配列 techniques の中に4つの技名が入っています。そして index を 0 から始めて、配列の最後まで while文で順番に取り出しています。

この while文の流れ

順番index の値条件
index < techniques.length
表示される要素
1回目0truetechniques[0]
2回目1truetechniques[1]
3回目2truetechniques[2]
4回目3truetechniques[3]
5回目判定4false終了

この表を見ると、while文の流れがかなり分かりやすくなります。index は 0 から始まり、1回処理するごとに index++ で1増えます。そして、配列の長さと同じ値になったところで条件が false になり、終了します。

Lesson08_1.java の読み方

このプログラムの中には、while文を理解するための大事なポイントがいくつか入っています。

配列の長さを条件に使う

while (index < techniques.length)

ここでは 配列の長さより小さい間 だけループを続けています。length を使うことで、要素数が変わっても対応しやすくなります。

人に見せる番号と配列の番号を分ける

displayNum = index + 1;

Javaの配列のインデックスは 0 から始まりますが、人に見せる番号は普通 1番目、2番目 としたいことが多いです。そのため、表示用には index + 1 を使っています。

更新処理を忘れない

index++;

これがとても大事です。もしこれがなければ index はずっと 0 のままで、条件がずっと true になり、同じ技を延々と表示し続けることになります。これを 無限ループ と呼びます。

ドラゴンボール風にいえば、修行回数を進める札をめくらないまま、ずっと同じ一手目だけを続けてしまう状態です。

ループカウンタの始点を変える考え方

while文では、ループカウンタをどこから始めるかは自由に決められます。配列のインデックスに合わせて 0 から始めることもできますし、人間に見せる番号に合わせて 1 から始めることもできます。

次の例では、表示番号をそのままカウンタにして、配列のインデックスには 1 引いた値を使っています。

ファイル名:Lesson08_2.java

public class Lesson08_2 {
    public static void main(String[] args) {
        String[] trainingPlaces = {"重力修行室", "岩山の鍛錬場", "滝の集中場", "朝日の特訓台"};
        int stageNo = 1;

        while (stageNo < trainingPlaces.length + 1) {
            System.out.println(stageNo + ":" + trainingPlaces[stageNo - 1]);
            stageNo++;
        }
    }
}

実行結果

1:重力修行室
2:岩山の鍛錬場
3:滝の集中場
4:朝日の特訓台

このプログラムでは、stageNo を 1 から始めています。そのため、表示には stageNo をそのまま使えますが、配列のインデックスには stageNo - 1 を使っています。

Lesson08_2.java の考え方

この書き方は、配列の扱いとしては少し変則的に見えるかもしれませんが、表示番号とループカウンタをそろえたいときには分かりやすいことがあります。

0始まりと1始まりの違い

目的使う値
配列の要素を取り出す0から始まるインデックス
人に見せる番号1から始まる番号

stageNo - 1 を使う理由

stageNo配列アクセス
1trainingPlaces[0]
2trainingPlaces[1]
3trainingPlaces[2]
4trainingPlaces[3]

このように、人に見せる数え方と配列の数え方はずれているので、その差を調整しているわけです。

ドラゴンボール風にたとえるなら、修行帳では 第1修行場、第2修行場 と書いてあっても、棚の番号は 0番、1番、2番、3番 から始まるようなものです。見せ方と内部管理の番号は必ずしも同じではありません。

while文で気をつけたいこと

while文は便利ですが、使い方を間違えると意図しない動きをしやすい構文でもあります。特に初心者が気をつけたいのは、終了条件と更新処理です。

よくある注意点

注意点内容
更新処理を忘れる条件が変わらず無限ループになる
条件を間違える1回も実行されない、または回数がずれる
配列の範囲を超える配列の最後を超えてエラーになる

たとえば、配列の長さが4なのに index <= techniques.length としてしまうと、最後に techniques[4] を読もうとして範囲外になってしまいます。配列の有効なインデックスは 0 から length - 1 までだからです。

配列で特に注意したい条件

書き方意味
index < techniques.length正しい
index <= techniques.length範囲を超える危険がある

この違いはとても大切です。小さな違いに見えても、結果は大きく変わります。

while文と do-while文の違い

while文と似た構文に do-while文 があります。違いは、条件を先に判定するか、処理を先に1回実行するかです。

while文と do-while文の違い

構文判定のタイミング特徴
while文最初に条件を判定する条件が false なら1回も実行しない
do-while文1回実行してから条件を判定する必ず1回は実行する

たとえば while文では、最初から条件が false なら何も表示されません。けれど do-while文 なら、条件が false でも最初の1回だけは必ず実行されます。

ドラゴンボール風にたとえるなら、while文は 修行条件を満たした者だけ始める 型です。一方 do-while文 は まず一度やってみて、そのあと続行できるか判定する 型です。

do-while文で注意する点

do-while文では、最後の while のあとに ; が必要です。これは while文 との見た目の違いとして覚えておくとよいです。

今回は具体的な例示プログラムは Lesson08_1.java と Lesson08_2.java のみなので、do-while文 は構造の違いとして理解しておけば十分です。

whileループの流れを図で整理

下図は、while文が 条件判定 → 処理実行 → カウンタ更新 → 再判定 という流れで進むことを示したものです。条件が true なら同じ流れへ戻り、false になったらループを抜けることが分かります。while文の全体像をつかむのに役立つ図です。

↓クリックすると拡大表示されます。

この図から分かること

この図を見ると、while文は ただ同じ処理を何度も行う のではなく、毎回条件を確認しながら進む構造だと分かります。さらに、更新処理があるからこそ、いつか条件が false になって終われることも分かります。

配列とwhile文の組み合わせを図で整理

下図は、index というループカウンタが 0 から始まり、配列の各要素を順番に指しながら、length に達するまで取り出していく流れを示したものです。index の値と配列の位置の対応が見えるため、なぜ index < 配列.length が条件になるのかが分かります。

↓クリックすると拡大表示されます。

この図から分かること

この図を見ると、while文のループカウンタが配列のインデックスと対応しながら順番に要素を取り出していることが分かります。さらに、配列の最後まで行ったら条件が false になって終了する流れもイメージしやすくなります。

whileループを理解すると、繰り返し処理の土台ができる

while文は、繰り返し処理の基本を学ぶうえでとても大事な構文です。条件が成立している間だけ続ける、という考え方はとてもシンプルですが、そのぶん プログラムがどう進んでいくか を意識する練習になります。開始値、条件式、更新処理の3つをきちんとそろえることで、while文は安定して動くようになります。

ドラゴンボールの修行でも、ただ同じ動きを繰り返すのではなく、今が何回目か、まだ続けるのか、次へ進むのかを意識しながら続けることで、本当の意味で型が身についていきます。Javaの whileループ も同じで、単なる反復ではなく、条件を見ながら流れを管理する力を育てるための大事な一歩です。