JAvaでどのように複数のループネストから飛び出すか
方法1:ラベルlabel:外側のループ文の前にラベルを定義し、内側のループ体コードにラベル付きbreak文を使用します.ラベルは多層ネストループから飛び出すために使用されます.ラベルlabelでどの文を終了したいかを表示できます.規定ラベルlabelはループの前に置かなければならない(ループはラベルに続く必要があることを意味する).類似の機能はC#ではgotoでしか行えないが、Javaはgotoキーワードを保持しているが、使用は許されない(gotoは予約字).Labelと次のループ文の間には他のコードは存在しないことに注意してください.ラベルはbreakとcontinueにも適用されます.デザインの観点から言えばLabelもgotoもいい考えではありません.
方法2:boolean,break組合せ:Boolean型条件変数とbreakの組合せにより,内層サイクルによりジャンプ前に条件変数を変化させ,外層サイクル検出条件変数の変化時に外層サイクルを終了する.
方法3:return:内層サイクルで直接方法全体を飛び出す.
方法4:throw Exception:内層サイクルで直接異常を放出する.
public class OutLoopWithLabel{
public static void main(String args[]) {
ok: // ok :
for (int i = 0; i < 10; i++) {
for (int j = 0; j <= 10; j++) {
System.out.println("i=" + i + ",j=" + j);
if (j == 5)
break ok; //
}
}
}
}
方法2:boolean,break組合せ:Boolean型条件変数とbreakの組合せにより,内層サイクルによりジャンプ前に条件変数を変化させ,外層サイクル検出条件変数の変化時に外層サイクルを終了する.
public class OutLoopWithBooleanBreak {
public static void main(String args[]) {
int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } };
boolean found = false;
System.out.println("arr.length " + arr.length);
for (int i = 0; i < arr.length && !found; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.println("i=" + i + ",j=" + j);
if (arr[i][j] == 5) {
found = true; // found
break; //
}
}
}
}
}
方法3:return:内層サイクルで直接方法全体を飛び出す.
public class OutLoopWithReturn {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i * j > 60) {
return;
}
System.out.println(i + " * " + j + " = " + (i * j));
}
}
}
}
方法4:throw Exception:内層サイクルで直接異常を放出する.
public class OutLoopWithException {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i * j > 60) {
throw new Exception("exception");
}
System.out.println(i + " * " + j + " = " + (i * j));
}
}
}
}