多階層の拡張for文における複数の階層の処理をcontinue文でスキップし次の処理へ移る

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

構文

for( データ型[][] 2次元配列変数B : 3次元配列変数A ){
 配列変数Aの配列要素数分繰り返し行う処理
 ラベル:
 for( データ型[] 1次元配列変数C : 2次元配列変数B ){
  配列変数Bの配列要素数分繰り返し行う処理
  for( データ型 変数 : 1次元配列変数C ){
   配列変数Cの配列要素数分繰り返し行う処理
   continue ラベル; // 2次元配列変数Bの階層の現在のループ(繰り返し)処理の残りをスキップさせ、2次元配列変数Bの次のループ(繰り返し)処理へ移る
  }
 }
}

サンプル

多次元配列を拡張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 ) {
      continue sample;
     }
     System.out.println( "「" + $itemC + "」" );
    }
   }
  }

 }

}

実行結果

「1」
「2」
「3」
「4」
「7」
「8」
「9」
「10」
「11」
「12」

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