1次元配列はそんなに難しくないと思います。問題は2次元配列です。構造は実はシンプルなんですが、覚えにくい部分があります。
式としては、[]がもう一つ増えて例えば、
int[][] a = new int[3][5];
となります。
配列を宣言するときに、値を入れることができます。
1 2 3 4 5 6 7 | //初期化の際に直接値を入れる。 //int[][] a = new int[3][5];と構造的には同じ int[][] a = {{0, 1, 2, 3, 4}, {5, 6, 7, 8, 9}, {10, 11, 12, 13, 14}}; //0~2の値を入れれば、それぞれの行の値が出る println(a[0]); |
この場合、以下のように行と列の対応を覚えるといいでしょう。本当は違うんですが、この後の画像処理のコードと関連するので以下のように覚えます。

この式の配列の概念図は、以下のようになります。つまり、3行 x 5列 = 15個の箱が作られるということです。以下の図に、それぞれの箱の番号を記載してあります。

それぞれの箱の値を変えたい時は、a[0][3] = 5 などのように値を代入してあげます。
でも、これだけの説明では2次元配列がなぜあるのかがよく分からないですよね。
以下に参考例を示します。少し長いですが、がんばって読んでみて下さい。
このサンプルコードは、一次元配列サンプルの続きになりますが、3 x 5個の円の変化のスピードを変えるプログラムです。
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 | float[][] eSize = new float[3][5]; //円のサイズ float[][] speed = {{0.1, 0.5, 0.3, 0.2, 1.5}, //円の拡大縮小のスピード {1.0, 2.0, 1.5, 2.0, 0.05}, {0.4, 0.8, 0.08, 1.1, 1.4}}; float minSize = 1.0; //円のサイズの最小値 float maxSize = 100.0; //円のサイズの最大値 void setup() { size(400, 200); background(255); smooth(); noStroke(); fill(0); for(int y = 0; y < 3; y++){ //円のサイズを最小値に設定 for(int x = 0; x < 5; x++){ eSize[y][x] = minSize; } } } void draw() { background(255); for(int y = 0; y < 3; y++){ //列方向 for(int x = 0; x < 5; x++){ //行方向 eSize[y][x] += speed[y][x]; //円のサイズを変化させる //もし円のサイズが最大値を超えたか最小値未満になったら、方向を変える if(eSize[y][x] > maxSize || eSize[y][x] < minSize) speed[y][x] = -speed[y][x]; ellipse(100*x, 100*y, eSize[y][x], eSize[y][x]); //円を描く } } } |
結果

上の式の特徴は、前述の15個の箱にそれぞれ独自の変数が設定されているということです。プログラムを実行してみると、バラバラのスピードで再生されているのが分かるでしょう。
2次元配列が使われるケースはこの授業では多くはないのですが、画像処理や3Dグラフィックスのプログラムでは非常によく使われます。
この配列は、特に何次元までという制限はないので、3次元でも4次元でも作れるのですが、実際に使うのは2次元配列までということが多いので、ここでは2次元配列までしか説明しません。
この2次元配列は後半の画像処理(コンピュータヴィジョン)の授業でまた使われるので、必ず理解しておきましょう。
Sorry, comments are closed.