
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回目 | 0 | true | techniques[0] |
| 2回目 | 1 | true | techniques[1] |
| 3回目 | 2 | true | techniques[2] |
| 4回目 | 3 | true | techniques[3] |
| 5回目判定 | 4 | false | 終了 |
この表を見ると、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 | 配列アクセス |
|---|---|
| 1 | trainingPlaces[0] |
| 2 | trainingPlaces[1] |
| 3 | trainingPlaces[2] |
| 4 | trainingPlaces[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ループ も同じで、単なる反復ではなく、条件を見ながら流れを管理する力を育てるための大事な一歩です。
