導入
私たちの最初のプログラムは、次々に実行される一連の命令でした。フォークはありません。これは、挨拶フレーズと算術計算をコンソールに出力する HelloWorld です。最初のプログラムの後、分岐すること、つまりプログラムが条件に応じて特定のアクションを実行することを学びました。エアコンをコーディングして暖房と冷房をオンにする方法は次のとおりです。if (tempRoom>tempComfort)
airConditionerOn();
if (tempRoom<tempComfort
heaterOn();
次のステップに進みましょう。日常生活の中で、私たちは単調で繰り返しの動作を行うことがよくあります。たとえば、パイにするためにリンゴの皮をむくなどです。この興味深いプロセスは次のように説明できます。
-
盆地にリンゴがある場合は、手順 1.1 ~ 1.4 に従います。
- 1.1. リンゴを取ってください
- 1.2. きれいにしてスライスに切ります
- 1.3. フライパンのパイの底に置きます
- 1.4. ステップ 1 に戻りましょう。
- リンゴの数を制限しましょう。しかし、リンゴの数が少ない場合、一部のコマンドは「ペイロード」なしで無駄に実行されてしまいます (そしておそらく、存在しないリンゴの皮をむいているときに身を切ることになるでしょう)。
- 私たちの加工チームよりも多くのリンゴがある場合、一部の製品は未加工のままになります。
- このような「コード」は読みにくく、繰り返しが多く、修正が困難です。
ループは、アクションを複数回実行するための演算子です。
この場合、Java while ループ (卑劣なループ) がうまく機能します。この設計では、複数のアクションが簡潔でわかりやすい構造にまとめられています。Java でリンゴをスライスしてパイにするための while アルゴリズムは次のようになります。while(числоЯблокВТазике>0) {
яблоко = тазик.взятьОчередноеЯблоко();
положитьВПирог(яблоко.чистить().нарезать());
числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
}
System.out.println('Apples for the pie are processed.');
コマンド構文
while ステートメントを記述する最初の方法は次のとおりです。while(Логическое выражение) {
// Loop body - periodically executed statement(s)
}
これは次のように (段階的に) 行われます。
- 括弧内の while に続くブール条件を評価します。
- 論理条件が true の場合、ループ本体内のステートメントが実行され、ループ本体内の最後のステートメントを実行した後、ステップ 1 に進みます。
- 論理条件が false の場合は、while ループの外側の最初のステートメントに進みます。
前提条件付きのループ
ループ本体を実行する前に、常に論理式 (ループに入る条件) を事前に計算するため、このタイプの while は、前提条件付きループと呼ばれることがよくあります。最初の 10 個の整数、つまり数値の正のべき乗の表を作成してみましょう。public static void main(String[] args) {
int number = 3; // Number to be raised to a power
int result = 1; // Result of exponentiation
int power = 1; // Initial exponent
while(power <= 10) { // loop entry condition
result = result * number;
System.out.println(number + "to the extent" + power + " = " + result);
power++;
}
}
コンソール出力結果:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0
事後条件付きループ
2 番目のタイプのサイクル:do {
// Loop body - periodically executed statement(s)
}while (Логическое выражение);
次のように実行します (手順):
- ループの本体が実行されます (do キーワードの直後)。
- 括弧内の while に続くブール条件を評価します。
- 論理条件が true の場合は、ステップ 1 に進みます。
- 論理条件が false の場合は、while ループの外側の最初のステートメントに進みます。
public static void main(String[] args) {
int number = 3;// Number to be raised to a power
int result = number;// Result of exponentiation
int power = 1;// Initial exponent
do {
System.out.println(number + "to the extent" + power + " = " + result);
power++;
result = result * number;
}while (result < 10000); // loop exit condition
コンソール出力結果:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
Process finished with exit code 0
前提条件のあるループのバージョンと比較して、コードの変更に注意してください。
ループの操作に関する興味深い事実
ループ本体内の制御コマンド
ループの進行に影響を与えるコマンドは 2 つあります。break です。その機能については次の章で説明します。- continue – 現在のループ本体の実行を停止し、while 演算子の論理式に移動します。計算された式が true の場合、ループの実行は続行されます。
- Break – 現在のループの実行を直ちに停止し、ループの外側の最初のコマンドにジャンプします。したがって、現在のループの実行は中断されます。次のトピックで詳しく見ていきます。
continue
。
while(числоЯблокВТазике>0) {
яблоко = тазик.взятьОчередноеЯблоко();
числоЯблокВТазике--;//-- this is a decrement, reduces the number of apples by one
if (яблоко.плохое()) { // method will return true for rotten, etc. apples
яблоко.выкинутьВМусор();
continue; // continue the loop, go to the condition number ofApplesIn the Basin>0
}
положитьВПирог(яблоко.чистить().нарезать());
}
この構造は、
continue
ループ本体内で、特定の条件が発生したときにコマンドを実行する必要がある場合によく使用されます。たとえば、機器内のセンサーがトリガーされたときにアクションを実行する(そうでない場合は、インジケーターを読み取るサイクルを継続するだけです)。サイクルの特定のステップでのみ式を計算します。最後のケースの例は、2 乗がその数より小さい自然数の 3 乗の合計を while ループで計算することです。
public static void main(String[] args) {
int sum = 0; // total amount
int i = 0; // starting number of the row
int count = 20; // amount of numbers
while(i<=count) {
i++; // take the next number, i++ is equivalent to i=i+1
if (i*i<=count) // if the square of the number is less
continue; // number of numbers - do not count the sum
// move on to the next number in the loop
sum += i*i*i; // otherwise, we calculate the sum of cubes of numbers
} // sum += i*i*i - notation similar to sum = sum + i*i*i
System.out.println(sum);// print result
}
終わりのないサイクル
これらの制御コマンドは、無限ループで使用されることがほとんどです。論理的な終了条件が決して満たされないため、このように呼ばれます。コードでは次のようになります。while(true) {
// Loop body
}
break
この場合、コマンドを使用して終了を整理すると 便利です。このタイプのループは、ループ本体のロジックの外側で形成される外部条件を待機しているときに発生します。たとえば、ヒーローの周囲の仮想世界をエミュレートするゲーム (ループを終了する = ゲームを終了する)、オペレーティング システム。あるいは、アルゴリズムを使用する場合、ループ内での後続の呼び出しごとに結果が改善される可能性がありますが、時間や外部イベント (チェッカー、チェス、天気予報) の発生によって制限されます。通常の状況では、無限ループがプログラムの不安定性の問題の 1 つであることを覚えておく必要があります。実証するために、数のべき乗に戻りましょう。
public static void main(String[] args) {
int number = 3; // Number to be raised to a power
int result = 1; // Result of exponentiation
int power = 1; // Initial exponent
while(true) {
result = result * number;
System.out.println(number + "to the extent" + power + " = " + result);
power++;
if (power>10)
break; // exit from the loop
}
}
コンソール出力結果:
3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049
Process finished with exit code 0
入れ子になったループ
ここで、私たちのサイクルに関する最後のトピックに移ります。アップルパイ (現時点ではお腹が空いていないことを願っています) と「ループ」について考えてみましょう。-
盆地にリンゴがある場合は、手順 1.1 ~ 1.4 に従います。
- 1.1. リンゴを取ってください
- 1.2. きれいにしてスライスに切ります
- 1.3. フライパンのパイの底に置きます
- 1.4. ステップ 1 に戻りましょう。
- スライスの数 = 0
-
スライス数が 12 未満の場合は、手順 2.1 ~ 2.3 に従います。
- 2.1. リンゴから別のスライスを切り取ります
- 2.2. スライス数++
- 2.3. ステップ2に戻る
-
盆地にリンゴがある場合は、手順 1.1 ~ 1.6 に従います。
- 1.1. リンゴを取ってください
- 1.2. 剥がしてください
- 1.3. スライスの数 = 0
- 1.4. Пока число долек < 12, выполнить шаги с 1.4.1 по 1.4.3
- 1.4.1. Отрезать очередную дольку от яблока
- 1.4.2. Кол-во долек ++ 1.4.3. Возвращаемся на шаг 1.4
- 1.5. Помещаем дольки на тестовое основание пирога из теста на сковороде
- 1.6. Возвращаемся на шаг 1.
public static void main(String[] args) {
// Display the values of the second multiplier in the line
System.out.println(" 2 3 4 5 6 7 8 9");
int i = 2; // first multiplier, assign starting value
while(i<10) { // First loop, execute while the first multiplier is less than 10
System.out.print(i + " | ");// Display the first multiplier at the beginning of the string
int j = 2; // second multiplier, starting value
while (j<10) { // Second loop, execute while the second multiplier is less than 10
int mul=i*j; // Calculate the product of factors
if (mul<10) // If it contains one digit, print two spaces after it
System.out.print(mul + " ");
else // otherwise output the product and after it - one space
System.out.print(mul + " ");
j++; // Increase the second multiplier by one,
} // Go to the beginning of the second loop (while (j<10 ).... )
System.out.println(); // Move to the next line of output
i++; // Increase the first multiplier by one,
} // Go to the beginning of the first loop (while ( i<10 ) ....
}
Результат вывода на консоль:
2 3 4 5 6 7 8 9
2 | 4 6 8 10 12 14 16 18
3 | 6 9 12 15 18 21 24 27
4 | 8 12 16 20 24 28 32 36
5 | 10 15 20 25 30 35 40 45
6 | 12 18 24 30 36 42 48 54
7 | 14 21 28 35 42 49 56 63
8 | 16 24 32 40 48 56 64 72
9 | 18 27 36 45 54 63 72 81
Process finished with exit code 0
Циклы (в частности, оператор while) – один из фундаментальных кирпичиков построения программ. Решая задачи на JavaRush, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.
GO TO FULL VERSION