最高のプログラマーは怠惰なプログラマーだ、と言われます。同じ種類のアクションを何度も実行する代わりに、彼は自分に代わってその仕事を行うアルゴリズムを考え出します。そして、彼はそれをやり直す必要がないようにうまくやってくれます。 同じコードを何度も書くことを避けるために、ループが発明されました。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滴入手してください。 ...
- ドロップを30個入手。
- 薬を閉めます。
- 受け取った部分を受け取ります。
- グラスを用意します。
- ドリップキャップを開けます。
- 30滴入手してください。
- 薬を閉めます。
- 受け取った部分を受け取ります。
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 つの段階に基づいており、次の図で表すことができます。 ループを終了する条件はブール式です。false の場合、ループは終了します。上の例では、変数はi
1 ずつ増加します。その値が 5 未満の場合、ループは継続します。i
ただし、5 以上になるとすぐにサイクルは停止します。カウンタ演算子は、カウンタ変数に対して変換を実行する式です。上の例では、変数はi
1 ずつ増加しました。つまり、ループはちょうど 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 (;;) {
}
ただし、ほとんどの場合、無限ループは論理エラーの証拠であることに注意してください。このようなループには終了条件が必要です。
GO TO FULL VERSION