入れ子(ネスト)で多階層にした拡張for文において、複数の階層のループ(繰り返し)処理を終了させたいときは、break文にラベルを指定する。
構文
for( データ型[][] 2次元配列変数B : 3次元配列変数A ){
配列変数Aの配列要素数分繰り返し行う処理
ラベル:
for( データ型[] 1次元配列変数C : 2次元配列変数B ){
配列変数Bの配列要素数分繰り返し行う処理
for( データ型 変数 : 1次元配列変数C ){
配列変数Cの配列要素数分繰り返し行う処理
break ラベル; // 2次元配列変数Bの階層までのループ(繰り返し)処理を終了させ、2次元配列変数Aのループ(繰り返し)処理へ移る
}
}
}
配列変数Aの配列要素数分繰り返し行う処理
ラベル:
for( データ型[] 1次元配列変数C : 2次元配列変数B ){
配列変数Bの配列要素数分繰り返し行う処理
for( データ型 変数 : 1次元配列変数C ){
配列変数Cの配列要素数分繰り返し行う処理
break ラベル; // 2次元配列変数Bの階層までのループ(繰り返し)処理を終了させ、2次元配列変数Aのループ(繰り返し)処理へ移る
}
}
}
サンプル
多次元配列を拡張for文で展開。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package samplePackage; public class SampleClass { public static void main( String[] args ){ int[][][] $array = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } }, { { 9, 10 }, { 11, 12 } } }; for( int[][] $itemA : $array ){ sample: for( int[] $itemB : $itemA ){ for( int $itemC : $itemB ){ if ( $itemC == 5 ) { break sample; } System.out.println( "「" + $itemC + "」" ); } } } } } |
実行結果
「1」
「2」
「3」
「4」
「9」
「10」
「11」
「12」
「2」
「3」
「4」
「9」
「10」
「11」
「12」
ラベルを指定しない場合の実行結果と違い「$itemC」が「5」「6」「7」「8」のときの出力がない点に注目。