Javaにおけるネストされたループからの脱出方法のコード例
Javaにおけるネストされたループからの脱出方法
Javaにおいて、ループの入れ子構造(ネストされたループ)から脱出する場合、通常は以下のような方法が使われます。
breakステートメント
- 直接脱出:
break
ステートメントを使用すると、その直近のループから脱出します。 - 外側のループへの脱出: ラベルを使用することで、内側のループだけでなく、特定の外側のループからも脱出できます。
outerLoop:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (j == 2) {
break outerLoop; // 外側のループから脱出
}
System.out.println(i + ", " + j);
}
}
returnステートメント
- メソッドからの脱出: メソッド内でネストされたループを使用している場合、
return
ステートメントを使用してメソッドから直接脱出することができます。これにより、すべてのループが終了します。
public int findMax(int[][] matrix) {
int max = matrix[0][0];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] > max) {
ma x = matrix[i][j];
}
}
}
return max ;
}
フラグ変数
- 条件による脱出: ブール型のフラグ変数を設定し、特定の条件が満たされたときにそのフラグを更新することで、ループから脱出することができます。
boolean found = false;
for (int i = 0; i < array.length; i++) {
if (array[i] == target) {
found = true;
break;
}
}
if (found) {
// 対象の要素が見つかった場合の処理
}
注意:
break
ステートメントは、その直近のループから脱出します。ラベルを使用しない限り、外側のループには影響しません。return
ステートメントは、メソッドから直接脱出するため、メソッド内のすべての処理が終了します。- フラグ変数は、特定の条件に基づいてループを終了する必要がある場合に便利です。
- 直接脱出:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (j == 2) {
break; // 内側のループから脱出
}
System.out.println(i + ", " + j);
}
}
- 外側のループへの脱出:
outerLoop:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (j == 2) {
break outerLoop; // 外側のループから脱出
}
System.out.println(i + ", " + j);
}
}
- メソッドからの脱出:
public int findMax(int[][] matrix) {
int max = matrix[0][0];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] > max) {
ma x = matrix[i][j];
}
}
}
return max ;
}
- 条件による脱出:
boolean found = false;
for (int i = 0; i < array.length; i++) {
if (array[i] == target) {
found = true;
break;
}
}
if (found) {
// 対象の要素が見つかった場合の処理
}
メソッドの再帰呼び出し
- 条件に基づく再帰: 再帰呼び出しを使用して、特定の条件が満たされたときにループを終了することができます。
- 深さ優先探索: 深さ優先探索などのアルゴリズムでは、再帰呼び出しが自然にネストされたループを表現します。
public void recursiveMethod(int depth) {
if (depth > maxDepth) {
return; // 再帰の終了条件
}
// ループの処理
recursiveMethod(depth + 1);
}
例外処理
- 異常な条件: 例外を投げ、キャッチすることで、ネストされたループから脱出することができます。ただし、例外は通常、エラーや異常な状況を処理するために使用されるため、適切な状況で使用する必要があります。
try {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (j == 2) {
throw new RuntimeException("Loop terminated");
}
// ループの処理
}
}
} catch (RuntimeException e) {
// 例外をキャッチして処理
}
ラベルの使用(非推奨)
- 特定のループ: ラベルを使用して、特定のループから脱出することができます。ただし、ラベルの使用は可読性が低下する可能性があるため、一般的には推奨されません。
outerLoop:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (j == 2) {
break outerLoop; // 外側のループから脱出
}
// ループの処理
}
}
java loops nested-loops