JavaRush /Java Blog /Random-JA /JavaのForループ

JavaのForループ

Random-JA グループに公開済み
最高のプログラマーは怠惰なプログラマーだ、と言われます。同じ種類のアクションを何度も実行する代わりに、彼は自分に代わってその仕事を行うアルゴリズムを考え出します。そして、彼はそれをやり直す必要がないようにうまくやってくれます。 Java での for ループの使用方法 - 1同じコードを何度も書くことを避けるために、ループが発明されました。0 から 99 までの数字をコンソールに表示する必要があると仮定して、ループを使用しないコードを作成します。
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
このコードには 100 行かかります。とてもたくさんあります。ループを使用すると次のようになります。
for(int i = 0; i < 100; i++) {
   System.out.println(i);
}
たったの3行!

for ループとは何ですか?

for ループは、アルゴリズムの実行の線形性を壊し、指定されたコードを何度も実行できるようにするプログラム コードの制御構造です。たとえば、薬を30滴服用する必要があります。アルゴリズムは次のようになります。
  1. グラスを用意します。
  2. 蓋を開けます。
  3. 1滴入手。
  4. 2滴入手してください。
  5. ...
  6. ドロップを30個入手。
  7. 薬を閉めます。
  8. 受け取った部分を受け取ります。
このアルゴリズムは、もっと簡単に説明できます。
  1. グラスを用意します。
  2. ドリップキャップを開けます。
  3. 30滴入手してください。
  4. 薬を閉めます。
  5. 受け取った部分を受け取ります。
私たちは他の人々との会話でほぼ毎日 for ループを使用します。「...通りを 20 歩下ったところ...」、「...10 回繰り返して、2 倍の速度でさらに 5 回繰り返します...」、「..さまざまなカテゴリーで 5 回購入すると、賞品がもらえます…」長く続けることもできますが、意味は明らかです。Java では、コードを短く簡潔にするために for ループが不可欠です。

for ループの仕組み

for ループは次のように使用されます。
for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
	// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
   System.out.println(i);
}
結論:

0
1
2
3
4
このエントリを人間の言語に翻訳すると、次のようになります。「初期値 0 で変数 i を作成し、値が 5 になるまでそれに 1 を加算し、各ステップで i の値をコンソールに書き込みます。」Java の for ループは 3 つの段階に基づいており、次の図で表すことができます。 Java で for ループを使用する方法 - 2ループを終了する条件はブール式です。false の場合、ループは終了します。上の例では、変数はi1 ずつ増加します。その値が 5 未満の場合、ループは継続します。iただし、5 以上になるとすぐにサイクルは停止します。カウンタ演算子は、カウンタ変数に対して変換を実行する式です。上の例では、変数はi1 ずつ増加しました。つまり、ループはちょうど 5 回実行されます。カウンタ演算子が変数に 2 を加算するとi、結果は異なります。
for(int i = 0; i < 5; i = i + 2) {
   System.out.println(i);
}
結論:

0
2
4
また、変数の乗算、除算、べき乗など、通常は何でも行うことができます。重要なことは、変換の結果が数値になるということです。 ループの本体は、実行可能な任意のコードです。上の例では、ループの本体は変数 i の値をコンソールに出力していましたが、この本体の内容はタスクと想像力によって制限されます。スキーム全体を要約すると、この for ループの原理は次のとおりです。ループ本体内のコードは、ループを終了する条件に達するまでに、カウンター演算子が実行する変換の数と同じ回数実行されます。 。ループ終了条件を次のように設定した場合true:
for(int i = 0; true; i++) {
   if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
その後、ループ後のコードは実行unreachable statementされないため、エラーのマークが付けられます。創意工夫への挑戦: 以下のコードを実行した結果、Loop endedコンソールに「 」が出力されますか、それとも無限にループが実行されますか?
for(int i = 0; i > -1; i++) {
   if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
答え: あるでしょう。変数 i は遅かれ早かれ最大値に達し、さらに増加すると負の最大値になり、その結果終了条件が満たされます (i < = -1)。

forEach ループ

ループを操作するときは、配列またはコレクションを反復処理する必要がある場合があります。通常、for ループを使用して配列を反復処理できます。
public void printAllElements(String[] stringArray) {
   for(int i = 0; i < stringArray.length; i++) {
       System.out.println(stringArray[i]);
   }
}
そしてそれは正しいのです。しかし、配列のすべての要素を 1 つずつ反復処理するために、forEach 構造を思いつきました。その署名は次のとおりです。
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
	// Loop body
}
次の方法で、文字列の配列を反復処理し、それぞれをコンソールに出力できます。
public void printAllElements(String[] stringArray) {
   for(String s : stringArray) {
       System.out.println(s);
   }
}
それも短くて簡潔。最も重要なことは、カウンターと終了条件について考える必要がなく、すべてがすでに完了していることです。

for ループの使用方法

ここで、Java で for ループを使用してさまざまな問題を解決する例をいくつか見てみましょう。

逆サイクル(大きいものから小さいものへ)

for(int i = 5; i > 0; i--) {
   System.out.println(i);
}
結論:

5
4
3
2
1

ループ本体内の複数の変数とカウンターのインクリメント

for ループ内で複数の変数を使用できます。たとえば、それらは counter ステートメント内で変換できます。
int a = 0;
for(int i = 5; i > 0; i--, a++) {
   System.out.print("Step: " + a + " Meaning: ");
   System.out.println(i);
}
結論:

Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
または、2 つの変数を宣言し、それらが等しくなるまでループします。
for(int i = 5, j = 11; i != j; i++, j--) {
   System.out.println("i: " + i + " j: " + j);
}
結論:

i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
このアクションに価値があるとは考えられませんが、この可能性について知っておくと役に立ちます。for ループ内に内部ループを作成することもできます。この場合、ループ ステップの数は次のように乗算されます。
for(int i = 0; i < 5; i++) {
   System.out.print(i + " | ");
   for(int j = 0; j < 5; j++) {
       System.out.print(j + " ");
   }
   System.out.print('\n');
}
結論:

0 | 0 1 2 3 4 
1 | 0 1 2 3 4 
2 | 0 1 2 3 4 
3 | 0 1 2 3 4 
4 | 0 1 2 3 4
カウンタ付きループでは、j外側のループのカウンタにアクセスできます。これにより、ネストされたループは、2 次元、3 次元、その他の配列を走査するための理想的な方法になります。
int[][] array = { {0, 1, 2, 3, 4 },
                       {1, 2, 3, 4, 5},
                       {2, 3, 4, 5, 6},
                       {3, 4, 5, 6, 7}};

for(int i = 0; i < array.length; i++) {
   for(int j = 0; j < array[i].length; j++) {
       System.out.print(array[i][j] + " ");
   }
   System.out.print('\n');
}
結論:

0 1 2 3 4 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 

サイクルの早期完了

ループの処理中にループを中断する必要がある場合は、breakループの現在の本体を停止する演算子を使用します。後続のすべての反復もスキップされます。
public void getFirstPosition(String[] stringArray, String element) {
   for (int i = 0; i < stringArray.length; i++) {
       if(stringArray[i].equals(element)) {
           System.out.println(i);
           break;
       }
   }
}
このメソッドは、配列内の最初に検索された要素の位置を出力します。
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
結論:

1

終わりのないサイクル

無限 for ループを作成するもう 1 つの方法は、カウンタ宣言領域、終了条件、およびカウンタ ステートメントを空のままにすることです。
for (;;) {
}
ただし、ほとんどの場合、無限ループは論理エラーの証拠であることに注意してください。このようなループには終了条件が必要です。 Java で for ループを使用する方法 - 3
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION