多重ループがよくわかりません。生徒からの質問

プログラミング

forループはわかったが、これを入れ子にした多重ループになるとよくわからないという声をよく聞きます。そこで、3重ループを例にして動作がわかるようにステップ実行した動画を作成してみました。

まずはプログラミングの基本の説明から。
プログラムでは繰り返し構造を良く使いますが代表的なものにforループがあります。
構文は例えば

for(初期化; 条件式; 更新){

}

のように書きます。より具体的にProcessingのプログラムで書くと

void setup() {
  for (int x=0; x<3; x++) {
    println("x=", x);
  }
}

のような感じです。
この場合は、xは0で初期化され条件式に合っていれば文を実行します。この場合はxの値を表示します。すなわち、0が表示されます。次にxが1増やされます。
条件式にあっている限り、文を実行してはxを1増やします。その結果、0, 1, 2が表示されます。

さて、このfor文は入れ子にできます。for文の中にfor文を入れて多重化することができるわけです。
2次元平面内の座標に順番にアクセスするときには2重ループが便利です。

void setup() {
  for (int y=0; y<3; y++) {
    for (int x=0; x<3; x++) {
      println("x=", x, "y=", y);
    }
  }
}

表示結果は次のようになります。

x= 0 y= 0
x= 1 y= 0
x= 2 y= 0
x= 0 y= 1
x= 1 y= 1
x= 2 y= 1
x= 0 y= 2
x= 1 y= 2
x= 2 y= 2

yが0の状態でxが0,1,2と変化し、次にyが1になった状態でxが0,1,2と変化し、さらにyが2になった状態でxが0,1,2と変化するわけです。

3次元空間内の座標に順番にアクセスするときには3重ループが便利です。

void setup() {
  for (int z=0; z<3; z++) {
    for (int y=0; y<3; y++) {
      for (int x=0; x<3; x++) {
        println("x=", x, "y=", y, "z=", z);
      }
    }
  }
}

さて、この場合、処理はどのような順番で実行されるでしょうか?x,y,zの値はどのように変化するでしょうか?
プログラムを1行ずつステップ実行して確かめてみましょう。
下記の動画で薄い青色のハッチがついた行がこれから実行するプログラムの行になります。
まずはプログラムの実行順を確認してみましょう。
確認が終わったら、右側のx,y,zの値の表も見ながら、もう一度動画を見てみましょう。
ステップ毎にどのように値が変化していくのかが理解できるまで、繰り返し動画を見てみるとよいでしょう。