多階層の拡張for文の複数の階層のループ処理をbreak文で終了させる

入れ子(ネスト)で多階層にした拡張for文において、複数の階層のループ(繰り返し)処理を終了させたいときは、break文にラベルを指定する。

構文

for( データ型[][] 2次元配列変数B : 3次元配列変数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」

ラベルを指定しない場合の実行結果と違い「$itemC」が「5」「6」「7」「8」のときの出力がない点に注目。