はじめに
インフラの分野でも、Iac化が進んで行くと考えています。そこで、ノウハウが体系だっているものが学び易いと考えて、Javaを学びはじめました。
今回は、ラベル (a と b) の役割にフォーカスしました。
public class Main {
public static void main(String[] args) {
int total = 0;
a: for (int i = 0; i < 5; i++) { // 外側のループ
b: for (int j = 0; j < 5; j++) { // 内側のループ
// i が偶数の場合、外側のループの次の反復にスキップ
if (i % 2 == 0) continue a;
// j が 3 より大きい場合、内側のループを終了
if (3 < j) break b;
// j を total に加算
total += j;
}
}
// total の値を出力
System.out.println(total);
}
}
ラベル(a, b)の意味と使い方
1. ラベル a の使用(continue a;)
ラベル a は、外側のループ(i に関するループ)に対応しています。continue a; は、i が偶数の場合に、外側のループ(i のループ)の次の反復に進むことを意味します。
-
continue a;は、iが偶数(i % 2 == 0)の場合に、外側のループの次の反復を開始させるため、内側のループ(jのループ)はスキップされます。 - これは、
iが偶数のときには、内側のループを無駄に実行しないようにするためです。
2. ラベル b の使用(break b;)
ラベル b は、内側のループ(j に関するループ)に対応しています。break b; は、j が 3 より大きくなった時に、内側のループ(j のループ)を終了させることを意味します。
-
if (3 < j) break b;は、jが 4 以上の値を取った場合に、内側のループを終了させるための命令です。これにより、jが 4 に到達する前に、内側のループを終了させます。
実行の流れ
-
外側のループ(
iループ) は、i = 0からi = 4まで実行されます。 -
内側のループ(
jループ) は、j = 0からj = 4まで実行されますが、iが偶数の場合はcontinue a;によってスキップされます。
実行結果の詳細
-
i = 0のとき(偶数):-
continue a;によって、内側のループがスキップされ、totalは加算されません。
-
-
i = 1のとき(奇数):-
j = 0:total += 0;→total = 0 -
j = 1:total += 1;→total = 1 -
j = 2:total += 2;→total = 3 -
j = 3:total += 3;→total = 6 -
j = 4:break b;→ 内側のループを終了。totalの値は6になります。
-
-
i = 2のとき(偶数):-
continue a;によって内側のループがスキップされ、totalは変わりません。
-
-
i = 3のとき(奇数):-
j = 0:total += 0;→total = 6 -
j = 1:total += 1;→total = 7 -
j = 2:total += 2;→total = 9 -
j = 3:total += 3;→total = 12 -
j = 4:break b;→ 内側のループを終了。totalの値は12になります。
-
-
i = 4のとき(偶数):-
continue a;によって内側のループがスキップされ、totalは変わりません。
-
最終的な total の値
i = 1 と i = 3 のときに total に加算され、最終的な値は 12 になります。
実行結果
12
まとめ
-
ラベル付き
continue(continue a;) は、外側のループ(iのループ)の次の反復に進むために使用されます。- 具体的には、
iが偶数のときに内側のループをスキップするために使います。
- 具体的には、
-
ラベル付き
break(break b;) は、内側のループ(jのループ)を終了させるために使用されます。- 具体的には、
jが 4 に達したときに内側のループを終了させます。
- 具体的には、
ラベルを使うことで、特定のループを制御することができ、ネストされたループの中で柔軟に制御フローを管理することが可能となります。