繰り返しの入れ子

Revised: Dec./26th/2001: Since: Dec./26th/2001

繰り返しとその脱出について紹介しました。ここでは、繰り返しの入れ子、 for ループのネスティングについて紹介します。

繰り返しは頻繁に入れ子にします。例えば、2次元配列の場合、全ての要素をサーチしようと思ったら、二重のループが必要になります。

サンプル

TestNest.java:

class TestNest{
  public static void main(String args[]){
    for(int i=0; i<=3; i++){
      for(int j=0; j<=5; j++){
        System.out.print(" (" + i + ", " + j + ")");
      }
      System.out.println("");
    }
  }
}

カウンター ij のループがネストされています。それぞれ、4回、6回繰り返します。

C:\Java>javac TestNest.java
C:\Java>java TestNest
 (0, 0) (0, 1) (0, 2) (0, 3) (0, 4) (0, 5)
 (1, 0) (1, 1) (1, 2) (1, 3) (1, 4) (1, 5)
 (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (2, 5)
 (3, 0) (3, 1) (3, 2) (3, 3) (3, 4) (3, 5)

次に九々表を作ってみましょう。最初に実行例を挙げておきます:

C:\Java>javac Kuku.java
C:\Java>java Kuku
  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81

10未満の数字と10以上の数字とで桁併せを行っていますが、最初は気にしないで作ってみてください。

Kuku.java:

class Kuku{
  public static void main(String args[]){
    for(int i=0; i<9; i++){
      for(int j=0; j<9; j++){
        int k=(i+1)*(j+1);
        if(k<10){
          System.out.print("  "+(i+1)*(j+1));
        }else{
          System.out.print(" "+(i+1)*(j+1));
        }
      }
      System.out.println("");
    }
  }
}

カウンター ij の掛け算結果 k を出力しているだけです。カウンター変数は初期値を0にしたので、1-9にするために1足しています。初期値を1から始めた方が分かりやすいと思いますが、基本的にプログラミングでは初期値を0とする習慣です。例えば配列の第一番目の要素のインデックスは0です。

表示を整える為に、 k<10 を条件として、数字の前に挿入するスペースの個数を調整しています。

このように繰り返しブロックが複層的になっているとき、全ての繰り返しブロックから脱出するにはどうすればよいでしょうか?多重ネストから脱出するには、ラベルを利用します。次は多重ネストからの脱出を説明します。



Copyright © 2001 SUGAI, Manabu. All Rights Reserved.