記事内にはプロモーションが含まれています

【Java】無限ループの作り方と止め方!while・forでの実装とエラー対策

【Java】無限ループの作り方と止め方!while・forでの実装とエラー対策 Java

Javaプログラミングを学習していると、「処理をずっと繰り返したい」という場面や、逆に「プログラムが止まらなくなって焦った」という経験をすることがあります。

これらはすべて「無限ループ」と呼ばれる現象に関係しています。

無限ループは、意図して使えば常駐プログラムなどの強力な武器になりますが、意図せず発生させてしまうとアプリケーションのフリーズやCPU使用率の急上昇を招くバグとなります。

この記事では、Javaにおける無限ループの正しい作り方(while文・for文)から、break を使った安全な抜け出し方、そして実行してしまった無限ループの緊急停止方法(EclipseなどのIDE含む)まで、現在の開発環境に合わせて徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

Javaで無限ループを作る2つの基本構文

Javaで「終わりのない繰り返し」を作る方法は主に2つあります。
while 文を使う方法と for 文を使う方法です。

どちらも機能は同じですが、可読性や好みに応じて使い分けられます。

while文を使った無限ループ while(true)

最も一般的で読みやすいのが、while 文を使った方法です。

条件式に常に「真(true)」となる値を渡すことで、ループを継続させます。

public class WhileLoopExample {
    public static void main(String[] args) {
        // 条件式に true を指定して無限ループにする
        while (true) {
            System.out.println("この処理は永遠に繰り返されます");
            
            // 実行確認のためスリープ(1秒待機)を入れています
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

while (true) と記述することで、「条件が常に成立している」状態を作り出しています。

シンプルで意図が伝わりやすいため、無限ループを作りたい場合の第一選択肢となります。

for文を使った無限ループ for(;;)

for 文を使っても無限ループを作成できます。
初期化、条件式、更新処理のすべてを省略する独特な書き方をします。

public class ForLoopExample {
    public static void main(String[] args) {
        // 全ての式を省略して無限ループにする
        for (;;) {
            System.out.println("for文による無限ループ中です");
            
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

for (;;) という記述は、C言語の時代からある伝統的な書き方です。
「条件がない=終了しない」と解釈され、無限ループとなります。

現代のJava開発では while (true) の方が直感的で好まれる傾向にありますが、古いコードやベテランエンジニアのコードで見かけることがあります。

無限ループを適切に止める break 文の使い方

無限ループといっても、本当に「永久に」動かし続けるプログラムは稀です。

通常は「ある条件を満たしたら終了する」という出口を用意します。この時に使うのが breakです。

if文とbreakを組み合わせて脱出する

ループ処理の中で if 文を使って条件を判定し、終了条件に合致した場合に break を実行してループを抜けます。

import java.util.Scanner;

public class BreakLoopExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("文字を入力してください('exit'で終了):");

        while (true) {
            System.out.print("> ");
            String input = scanner.nextLine();

            // 入力された文字が "exit" ならループを抜ける
            if ("exit".equals(input)) {
                System.out.println("ループを終了します。");
                break; // ここでwhileブロックの外へ脱出
            }

            System.out.println("入力された文字: " + input);
        }
        
        System.out.println("プログラムを終了しました。");
        scanner.close();
    }
}

実行結果は以下の通りです。

文字を入力してください('exit'で終了):
> こんにちは
入力された文字: こんにちは
> test
入力された文字: test
> exit
ループを終了します。
プログラムを終了しました。

ユーザーが “exit” と入力した時だけ if 文の中に入り、break が実行されます。

これにより無限ループが強制的に中断され、その後の処理(プログラム終了)へと進みます。

これが「意図的な無限ループ」の正しい使い方です。

実行中の無限ループを強制停止する方法(止め方)

開発中、コードのミス(バグ)によって、意図せずプログラムが止まらなくなってしまうことがあります。
そのような場合の「止め方」を環境別に紹介します。

EclipseやIntelliJ IDEAでの止め方

統合開発環境(IDE)で実行している場合、コンソールビューにある「停止ボタン(赤い四角アイコン)」をクリックします。

  • Eclipse:コンソール画面の上部ツールバーにある赤い四角いアイコン(終了)を押します。
  • IntelliJ IDEA:実行ウィンドウの左側または上部にある赤い四角いアイコン(Stop)を押します。

もしボタンがグレーアウトして押せない場合は、すでにプログラムが終了しているか、別のプロセスを選択している可能性があります。

コマンドライン(ターミナル)での止め方

コマンドプロンプトやターミナルで java コマンドを使って実行している場合は、キーボードショートカットを使います。

  • Windows / Mac / Linux共通: キーボードの Ctrl キーを押しながら C キーを押す(Ctrl + C)。

これで実行中のプロセスに割り込み信号が送られ、強制終了させることができます。

意図しない無限ループ(エラー)の原因と対策

バグとしての無限ループは、CPUのリソースを食いつぶし、PCの動作を重くする原因になります。
初心者が陥りやすいミスのパターンを知っておきましょう。

1. カウンタ変数の更新忘れ

while 文などでカウンタ変数を使っている場合に、変数を増やしたり減らしたりする処理(インクリメント/デクリメント)を忘れると、条件が永遠に変わらず無限ループになります。

int i = 0;
while (i < 5) {
    System.out.println("i = " + i);
    // i++; を書き忘れているため、iはずっと0のまま!
    // 結果:無限ループ発生
}

対策として、ループ内の処理の最後に、必ず変数を更新する記述があるか確認しましょう。

2. 終了条件の論理ミス

条件式の書き方を間違えて、「常に真(true)」になるように書いてしまうケースです。

int count = 10;
// countは減っていくのに、「0より大きい間」ではなく「0以上なら」などのミス
// あるいは減らすべきなのに増やしてしまうなど
while (count > 0) {
    System.out.println(count);
    count++; // 減らすべきなのに増やしているため、永遠に0より大きいまま!
}

対策として、ループを書く際は、「変数がどのように変化し、いつ条件がfalseになるか」をトレース(頭の中でシミュレーション)する癖をつけましょう。

3. 小数点(double/float)の比較による誤差

浮動小数点数は計算誤差を含むため、==!= での終了判定を行うと、想定通りに止まらないことがあります。

対策として、ループの制御変数には、可能な限り整数(int)を使用するか、不等号(<, >)を使って範囲で判定するようにします。

無限ループはどんな時に使う?実務での活用例

「無限ループ=悪いもの」ではありません。
サーバーサイド開発や組み込みシステムなど、特定の用途では必須のテクニックです。

1. 常駐アプリケーション(サーバー)

Webサーバーやチャットボットのように、「24時間365日リクエストを待ち続けるプログラム」は、メイン部分が巨大な無限ループになっています。

while (serverIsRunning) {
    // リクエストが来るのを待つ
    Request req = server.accept();
    // リクエストを処理する
    process(req);
}

2. ユーザー入力の待機とリトライ

先ほどの break の例のように、ユーザーが正しい値を入力するまで何度も入力を促す処理(バリデーション)にも使われます。

「正しい値が来るまで終わらない」というロジックは、無限ループと break で実装するのが最もシンプルです。

3. ゲームのメインループ

ゲーム開発においても、画面の描画やキャラクターの移動を絶えず更新し続けるために、メイン部分は無限ループで構成されています。

Javaのスキルを活かして年収を上げる方法

以上、Javaでの無限ループの作り方や止め方などについて解説してきました。

なお、Javaのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Javaエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなJavaの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。