プログラミング言語のループは、ある条件が true と評価される間、一連の命令/関数を繰り返し実行することを容易にする機能です。 Java には、ループを実行するための 3 つの方法が用意されています。すべての方法で同様の基本機能が提供されますが、構文と条件チェック時間が異なります。
Java は 3 つのタイプの条件文を提供します。この 2 番目のタイプはループ文です。
- while ループ: while ループは、指定されたブール条件に基づいてコードを繰り返し実行できるようにする制御フロー ステートメントです。 while ループは、繰り返しの if ステートメントと考えることができます。
構文:
while (boolean condition) { loop statements... }>
ジャワ
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > while> (i<=> 10> )> > {> > System.out.println(i);> > i++;> > }> > }> }> |
>
>
アメリカは何都市ですか出力
0 1 2 3 4 5 6 7 8 9 10>
- フローチャート:
- While ループはブール条件のチェックから始まります。 true と評価された場合は、ループ本体のステートメントが実行され、そうでない場合は、ループに続く最初のステートメントが実行されます。このため、とも呼ばれます 入口制御ループ
- 条件が true と評価されると、ループ本体内のステートメントが実行されます。通常、ステートメントには、次の反復で処理される変数の更新値が含まれます。
- 条件が false になると、ループが終了し、ライフ サイクルの終わりが示されます。
- for ループ: for ループは、ループ構造を記述する簡潔な方法を提供します。 while ループとは異なり、for ステートメントは初期化、条件、およびインクリメント/デクリメントを 1 行で実行するため、ループの構造が短く、デバッグが容易になります。
構文:
for (initialization condition; testing condition;increment/decrement) { statement(s) }>
ジャワ
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i=> 0> ;i<=> 10> ;i++)> > {> > System.out.println(i);> > }> > }> }> |
>
>出力
0 1 2 3 4 5 6 7 8 9 10>
- フローチャート:
- 初期化条件: ここでは、使用中の変数を初期化します。 for ループの開始を示します。すでに宣言されている変数を使用することも、ループに対してのみローカルに変数を宣言することもできます。テスト条件: ループの終了条件をテストするために使用されます。ブール値を返す必要があります。それはまた、 エントリ制御ループ ループ ステートメントの実行前に条件がチェックされるためです。ステートメントの実行: 条件が true と評価されると、ループ本体内のステートメントが実行されます。インクリメント/デクリメント: 次の反復で変数を更新するために使用されます。ループの終了: 条件が false になると、ループは終了し、ライフ サイクルの終了を示します。
- 一方を行います: do while ループは while ループに似ていますが、ステートメントの実行後に条件をチェックする点が異なるだけであり、したがって、 制御ループを終了します。
構文:
do { statements.. } while (condition);>
ジャワ
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > do> > {> > System.out.println(i);> > i++;> > }> while> (i<=> 10> );> > }> }> |
>
>出力
0 1 2 3 4 5 6 7 8 9 10>
- フローチャート:
- do while ループはステートメントの実行から始まります。初めての為、状態の確認は行っておりません。
- ステートメントの実行と変数値の更新後、条件の値が true または false かどうかがチェックされます。 true と評価された場合、ループの次の反復が開始されます。
- 条件が false になると、ループが終了し、ライフ サイクルの終わりが示されます。
- do-while ループは、条件がチェックされる前に少なくとも 1 回ステートメントを実行するため、終了制御ループの例であることに注意することが重要です。
ループの落とし穴
- 無限ループ: あらゆる種類のループを実装する際に最もよくある間違いの 1 つは、ループが永遠に終了しない可能性があること、つまりループが無限時間実行されることです。これは、何らかの理由で条件が失敗した場合に発生します。例: 無限 for ループ:
ジャワ
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > for> (;;) {> > }> > }> }> |
>
>
無限の while ループ:
ジャワ
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > while> (> true> )> > {> > // statement> > }> > > }> }> |
>
>
ジャワ
//Java program to illustrate various pitfalls.> public> class> LooppitfallsDemo> {> > public> static> void> main(String[] args)> > {> > // infinite loop because condition is not apt> > // condition should have been i>0.>> > }> > }> }> |
>
>
もう 1 つの落とし穴は、ループを通じてコレクション オブジェクトに何かを追加している可能性があり、メモリ不足になる可能性があることです。以下のプログラムを実行しようとすると、しばらくするとメモリ不足例外がスローされます。
ジャワ
//Java program for out of memory exception.> import> java.util.ArrayList;> public> class> Integer1> {> > public> static> void> main(String[] args)> > {> > ArrayList ar => new> ArrayList();> > for> (> int> i => 0> ; i { ar.add(i); } } }> |
>
>
出力:
Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at article.Integer1.main(Integer1.java:9)>
入れ子になったループ:
ネストされたループとは、別のループ ステートメント内のループ ステートメントを意味します。
ループにはさまざまな組み合わせがあります。 のために ループ、 その間 ループ、 一方を行います ループ。
例1 ネストされた for ループ
ジャワ
オープンソース OS の例は次のとおりです。
二分探索アルゴリズム
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i => 0> ; i <> 3> ; i++){> > for> (> int> j => 0> ; j <> 2> ; j++){> > System.out.println(i);> > }> > System.out.println();> > }> > }> }> |
>
>出力
0 0 1 1 2 2>
例2 ネストされたwhileループ
ジャワ
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> i => 1> , j => 1> ;> > while> (i <=> 3> ) {> > while> (j <=> 3> ) {> > System.out.print(j);> > j++;> > }> > i++;> > System.out.println(> ''> );> > j => 1> ;> > }> > }> }> |
>
>出力
123 123 123>
例3 ネストされた do while ループ
ジャワ
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> row => 1> , column => 1> ;> > int> x;> > do> {> > x => 4> ;> > do> {> > System.out.print(> ''> );> > x--;> > }> while> (x>= 行);>> );> > column++;> > }> while> (column <=> 5> );> > System.out.println(> ' '> );> > row++;> > }> while> (row <=> 5> );> > }> }> |
>
>出力
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5>
例4 ネストされた while ループと for ループ
ジャワ
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> weeks => 3> ;> > int> days => 7> ;> > int> i => 1> ;> > // outer loop> > while> (i <= weeks) {> > System.out.println(> 'Week: '> + i);> > // inner loop> > for> (> int> j => 1> ; j <= days; ++j) {> > System.out.println(> ' Days: '> + j);> > }> > ++i;> > }> > }> }> |
>
>出力
Week: 1 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 2 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 3 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7>