System.out.println("Java学習中");

【Java / Spring Boot】UI/UXの視点を活かしたバックエンド開発の学習ポートフォリオ

【Java Silver対策】while文の無限ループと波括弧 {} がない場合

Adobe Fireflyで作成

🟢 はじめに

Javaの学習を始めると、必ずと言っていいほどお世話になるwhile文」

条件を満たしている間、同じ処理を繰り返してくれる便利な構文ですが、

今回は

while文でよくある失敗パターンとその回避方法

について解説してみたいと思います。


♾️ 終わらない戦い(無限ループ)

まずは、勇者がスライムと戦うプログラムを見てみましょう。

スライムのHP(体力)が0より大きい間、攻撃を繰り返す

はずですが……。

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("スライムをたおした!");
    }
}

このコードを実行すると、なぜか永遠に終わらず、

画面には

「勇者の攻撃!」

という文字が永遠に表示され続けます。

これが無限ループです💀

原因は、

スライムのHPを減らす処理である slimeHp--; が // によってコメントアウトされている

からです。

条件である slimeHp > 0 (3 > 0)がずっと「真(true)」のまま変わらない

ため、勇者は永遠に攻撃を続けることになってしまいます。

💡 攻略のヒント

ループ処理を書くときは、

「いつか必ず条件が『偽(false)』になるような処理」(この場合はHPを減らすこと)

ループの中にちゃんと書かれているか、必ずチェックしましょう。


👻 見えない壁(波括弧 {} の省略)

気を取り直して、次の部屋の仕掛けを見てみましょう。

今度は「魔力カウントダウン」のプログラムです。

カウントが0になるまで魔力を減らしていきます。

public class MagicCountdown {
    public static void main(String[] args) {
        int countdown = 3;
        
        while (countdown >= 0)
            countdown--;
        System.out.println("最終カウント: " + countdown);
    }
}

さて、画面には何と表示されるでしょうか?

「0まで減らしたから 0 だよね?」

と思う方もいると思いますが、実行結果「-1」です。

結果は

最終カウント: -1

になります。

実はこのコード、よく見ると、

while文に波括弧 {} がありません

Javaでは、whileif{} がない場合、

「すぐ次の1文( ; まで)だけ」がループの範囲になる

というルールがあります。

つまり、コンピュータにはこう見えているのです。

// コンピュータの頭の中(実際の解釈)
while (countdown >= 0) {
    countdown--; // ここまでがループの部屋の中
}
System.out.println("最終カウント: " + countdown); // これは部屋の外

バトルの経過はこうなります。

カウントが 0 の時、

0 >= 0 はまだ「真」

なので、最後の countdown--; が発動します。

ここでカウントは -1 になります。

次の判定で

-1 >= 0 は「偽」になる

ため、ループを脱出します。

ループの外System.out.println が実行され、現在の値である -1 が表示されます。

💡 攻略のヒント

インデント(字下げ)がきれいに揃っていると、

「2行ともループの中」にある

ように見えてしまいますが、Javaインデントではなく {} で範囲を判断します。

思わぬバグを防ぐためにも、1行だけの処理でも省略せずに {} を書くのがベストプラクティスです。


📝 まとめ:ダンジョンを安全に進むために

🔹無限ループに注意
➡️ループの中には、必ず終了条件に向かう処理(変数の更新など)を忘れずに書きましょう。

🔹波括弧 `{}` は省略しない
➡️インデントの見た目に騙されないよう、常に波括弧を使ってループの範囲を明確にしましょう。

Java学習中の方の参考になれば幸いです🙌


【プロフィール・作品置き場】

kenichikamoi.com


🎵 Youtube(楽曲一覧)はこちら

www.youtube.com