
🟢 はじめに
Javaの学習を始めると、必ずと言っていいほどお世話になる「while文」。
条件を満たしている間、同じ処理を繰り返してくれる便利な構文ですが、
今回は
について解説してみたいと思います。
♾️ 終わらない戦い(無限ループ)
まずは、勇者がスライムと戦うプログラムを見てみましょう。
はずですが……。
public class SlimeBattle { public static void main(String[] args) { int slimeHp = 3; System.out.println("スライムがあらわれた!"); while (slimeHp > 0) { System.out.println("勇者の攻撃!"); // slimeHp--; ← 【注目】ここがコメントアウトされています! } System.out.println("スライムをたおした!"); } }
このコードを実行すると、なぜか永遠に終わらず、
画面には
という文字が永遠に表示され続けます。
これが無限ループです💀
原因は、
からです。
ため、勇者は永遠に攻撃を続けることになってしまいます。
💡 攻略のヒント
ループ処理を書くときは、
がループの中にちゃんと書かれているか、必ずチェックしましょう。
👻 見えない壁(波括弧 {} の省略)
気を取り直して、次の部屋の仕掛けを見てみましょう。
今度は「魔力カウントダウン」のプログラムです。
カウントが0になるまで魔力を減らしていきます。
public class MagicCountdown { public static void main(String[] args) { int countdown = 3; while (countdown >= 0) countdown--; System.out.println("最終カウント: " + countdown); } }
さて、画面には何と表示されるでしょうか?
と思う方もいると思いますが、実行結果は「-1」です。
結果は
になります。
実はこのコード、よく見ると、
Javaでは、while や if に {} がない場合、
というルールがあります。
つまり、コンピュータにはこう見えているのです。
// コンピュータの頭の中(実際の解釈) while (countdown >= 0) { countdown--; // ここまでがループの部屋の中 } System.out.println("最終カウント: " + countdown); // これは部屋の外
バトルの経過はこうなります。
カウントが 0 の時、
なので、最後の countdown--; が発動します。
ここでカウントは -1 になります。
次の判定で
ため、ループを脱出します。
ループの外で System.out.println が実行され、現在の値である -1 が表示されます。
💡 攻略のヒント
インデント(字下げ)がきれいに揃っていると、
ように見えてしまいますが、Javaはインデントではなく {} で範囲を判断します。
思わぬバグを防ぐためにも、1行だけの処理でも省略せずに {} を書くのがベストプラクティスです。
📝 まとめ:ダンジョンを安全に進むために
➡️ループの中には、必ず終了条件に向かう処理(変数の更新など)を忘れずに書きましょう。
🔹波括弧 `{}` は省略しない
➡️インデントの見た目に騙されないよう、常に波括弧を使ってループの範囲を明確にしましょう。
Java学習中の方の参考になれば幸いです🙌