第14回 – 配列 2


さて、前回に引き続きfor loopで配列を扱う方法です。
(と言っても前回は殆ど扱いませんでしたが)
では早速例を。

int[] x = new int[3];
int[] y = new int[3];

void setup() {
  size(800, 600, FX2D);

}

void draw() {

  background(0);

  for (int i = 0; i<3; i++) {

    ellipse(x[i], y[i], 5, 5);
    y[i] = y[i] + i+1;
    x[i] = x[i] + i+1;
  }
}

解説

まず、

int[] x = int[3];
int[] y = int[3];

の部分で配列を宣言しています。
int型の配列は変数と同じく、何も代入していなければ最初は全てに0が入っています。

そして、loopの中で、
変数 i を使ってx[0]〜x[2]を呼び出して、自分自身に1とiを足したものを、再び代入しています。
行数としては、ほんの少し短くなってる程度に見えますが、この3の部分を10にしてみましょう。

int[] x = new int[10];
int[] y = new int[10];

void setup() {
  size(800, 600, FX2D);

}

void draw() {

  background(0);

  for (int i = 0; i<10; i++) {

    ellipse(x[i], y[i], 5, 5);
    y[i] = y[i] + i+1;
    x[i] = x[i] + i+1;
  }
}

はい、たったこれだけで10倍です。
100にすれば100倍ですが、こんな風にすると数の変更が簡単です。

マジックナンバーの排除

int number = 10;
int[] x = new int[number];
int[] y = new int[number];

void setup() {
  size(800, 600, FX2D);
}

void draw() {

  background(0);

  for (int i = 0; i<number; i++) {

    ellipse(x[i], y[i], 5, 5);
    y[i] = y[i] + i+1;
    x[i] = x[i] + i+1;
  }
}

こうしておけば、

int number = 10;

の、numberに代入する数字を変更するだけで自動的に全ての円の個数に関係のある場所が変更されて便利です。
また、for loopを使う際に、

for(int i = 0;i<3;i++){ }

のような書き方をすると、この i<3の3が何のための数字だったのか、という事が後から見てわかりにくくなってしまいます。(こういう、実数値で書かれた何に使うのかよくわからない数値の事をマジックナンバーと呼んだりします)

for(int i = 0;i<number;i++){ }

こうしておけば、numberの回数だけ繰り返す、という事がわかります。

100や1000なんかの、for loopを使わなければ出来ないような(流石にコピペで作るのは大変ですから)ものも、少し数値を変更するだけで簡単に作ることが出来ます。

配列とfor loopの便利さがお分かりいただけたでしょうか。