Javaのwhileの基本~無限ループのサンプルと制御方法

スポンサーリンク
この記事は約11分で読めます。

whileループとは

指定された条件が true である限り、繰り返し処理を実行するための構文です。

今回は、while ループの基本的な構造などいくつかの出力を取り入れた説明と、無限ループの例、無限ループの制御方法、Eclipseで無限ループに入ったときの対処方法(トラブルシューティング)などを説明していきますので、マスターしておきましょう。

また、初期化、条件、変化式(更新)が分離しているため、柔軟性があり、条件をループの外部で更新する必要がある場合に適しています。

while ループの構文

条件: 各ループの繰り返しの前に評価される条件。条件が true の場合、ループが実行され、false の場合、ループが終了します。

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

基本的な例

1から5までの数を出力する

この例では、i が1から5までの値を取り、各値がコンソールに出力されます。

public class Main {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 5) {
            System.out.println(i);
            i++;
        }
    }
}

出力結果:

1
2
3
4
5

上記の場合変数iに1が代入されているので1~5までの数値が出力されます。

ユーザーが0を入力するまで数値を入力させる

この例では、ユーザーが0を入力するまで数値を入力させ、その数値を表示します。0が入力されるとループが終了し、プログラムが終了します。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number;
        
        System.out.println("Enter numbers (0 to quit):");
        number = scanner.nextInt();
        
        while (number != 0) {
            System.out.println("You entered: " + number);
            number = scanner.nextInt();
        }
        
        System.out.println("Program terminated.");
    }
}

出力結果:

Enter numbers (0 to quit):
5
You entered: 5
0
Program terminated.

コンソールに「Enter numbers (0 to quit):」と表示されユーザーの待ちになり、「5」を入力すると「You entered: 5」と表示され「0」を入力するとプログラムの終了を示す「Program terminated.」が出力されています。

配列の要素を出力する

この例では、numbers 配列の各要素を出力しています。i が配列の長さに達するまでループが続きます。

public class Main {
    public static void main(String[] args) {
        int[] numbers = {10, 20, 30, 40, 50};
        int i = 0;
        
        while (i < numbers.length) {
            System.out.println(numbers[i]);
            i++;
        }
    }
}

出力結果:

10
20
30
40
50

無限ループ

while ループを使用して無限ループを作成する場合、条件が常に true になるようにします。

条件が明示的に true の無限ループ

この例では、条件が常に true であるため、ループが無限に続きます。

public class Main {
    public static void main(String[] args) {
        while (true) {
            System.out.println("This is an infinite loop.");
        }
    }
}

条件が決して偽にならない無限ループ

この例では、i の値が常に0以上であるため、while ループの条件が常に真となり、無限にループします。

public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (i >= 0) {
            System.out.println("This is an infinite loop.");
            // iは常に0以上なのでループは終わらない
        }
    }
}

ループを抜ける

breakでループを抜ける

無限ループを使う場合は、break 文を使って条件に応じてループを抜けることができます。
break 文は、ループを完全に終了します。ループが終了した後の処理が続けて実行されます。

この例では、i が10に達したときに break 文が実行され、無限ループを終了します。

public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (true) {
            System.out.println("This is an infinite loop.");
            i++;
            if (i == 10) {
                break; // iが10になったらループを抜ける
            }
        }
        System.out.println("Loop exited.");
    }
}

出力結果:

This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
This is an infinite loop.
Loop exited.

continueでループを抜ける

continue は、ループの現在の反復をスキップし、次の反復に進みます。ループ自体は終了せず、条件が満たされる限り続けられます。

この例では、i が偶数の場合に continue 文が実行され、現在の反復をスキップして次の反復に進みます。その結果、i が奇数のときのみコンソールに出力されます。

public class Main {
    public static void main(String[] args) {
        int i = 0;
        
        while (i < 10) {
            i++;
            if (i % 2 == 0) {
                continue; // iが偶数の場合は次の反復に進む
            }
            System.out.println("i is: " + i);
        }
        
        System.out.println("Loop finished.");
    }
}

do..while

  • 繰り返し処理: 少なくとも一度は必ず実行される処理。
  • 条件: 各ループの繰り返しの後に評価される条件。条件が true の場合、ループが再度実行され、false の場合、ループが終了します。

do..while構文

do {
    // 繰り返し処理
} while (条件);

基本的な例

1から5までの数を出力する

この例では、i が1から5までの値を取り、各値がコンソールに出力されます。do ブロック内の処理が実行された後、while の条件が評価されます。

public class Main {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println(i);
            i++;
        } while (i <= 5);
    }
}

出力結果:

1
2
3
4
5

ユーザーが0を入力するまで数値を入力させる

この例では、ユーザーが0を入力するまで数値を入力させ、その数値を表示します。0が入力されるとループが終了し、プログラムが終了します。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number;
        
        do {
            System.out.println("Enter a number (0 to quit):");
            number = scanner.nextInt();
            System.out.println("You entered: " + number);
        } while (number != 0);
        
        System.out.println("Program terminated.");
    }
}

ループを抜ける

breakでループを抜ける

この例では、i が10に達したときに break 文が実行され、無限ループを終了します。

public class Main {
    public static void main(String[] args) {
        int i = 0;
        
        do {
            System.out.println("This is an infinite loop.");
            i++;
            if (i == 10) {
                break; // iが10になったらループを終了する
            }
        } while (true);
        
        System.out.println("Loop exited.");
    }
}

出力結果:

Enter a number (0 to quit):
8
You entered: 8
Enter a number (0 to quit):
9
You entered: 9
Enter a number (0 to quit):
1
You entered: 1
Enter a number (0 to quit):
0
You entered: 0
Program terminated.

こちらもコンソールにwhileと同様、「Enter numbers (0 to quit):」と表示されユーザーの待ちになり、「0」以外の数値を入力すると「You entered: 入力した数値」が表示され「0」を入力するとプログラムの終了を示す「Program terminated.」が出力されループが終了します。

注意点

条件が常に true にならないように注意: 無限ループが発生しないように、ループの条件が適切に評価されるように設計することが重要です。
リソースの解放: while ループ内で使用したリソース(ファイルハンドル、データベース接続など)は、ループが終了した後に適切に解放するようにしましょう。

Eclipseで無限ループに入ったときの対処方法(トラブルシューティング)

1.Eclipseでプログラムが無限ループに入った場合、「コンソール」タブにある四角の赤いアイコンを押します。
2.Eclipseが応答しない場合: Eclipse自体が応答しない場合は、タスクマネージャー(Windows: Ctrl + Shift + Esc、Mac: Command + Option + Esc)を使用してEclipseを強制終了しましょう。

にほんブログ村 IT技術ブログ IT技術メモへ

コメント

タイトルとURLをコピーしました