前提
- Processing(Java)のオブジェクト指向がわかっている
わかっていない人は: Fate/stay nightでわか(ったような気がす)るProcessing(Java)のオブジェクト指向
1.配列の宣言
Processing(Java)の配列は、実はオブジェクトだ。 だから、使うには、配列の変数を宣言して、newで配列のインスタンスを用意してそれに代入する必要がある。
たとえば、整数型で100個の要素を持った配列xを使いたければ、次のように書く。
int[] x; // 配列の変数xを宣言 x = new int[100]; // 整数型で100個の要素を持った配列のインスタンスを用意してxに代入
このように、配列の変数を宣言するには、「型[] 配列の名前」と書く。 また、インスタンスを用意して代入するには「配列の名前 = new 型[個数]」と書く。
これは、1行で書くこともできる。
int[] x = new int[100];
※Cで、同様の配列を用意するには「int x[100];」である。なお、Cの配列はオブジェクトではない。
2.配列の要素
配列の要素は0番目からはじまる。 よって、10個の要素を持った配列xを用意した場合、使えるのはx[0]〜x[9]である。
3.配列の要素の数
Processing(Java)の配列はオブジェクトなので、フィールドやメソッドを持つ。
よく使うフィールドに、配列の要素の数lengthがある。 たとえば、配列xの要素の数は、「x.length」で取得することができる。
これを使うと、整数型の要素10個持った配列xを用意して、0から9の値を代入するプログラムは、以下のように書ける。
int[] x;
x = new int[10];
for (int i = 0; i < x.length; i++) {
x[i] = i;
}
※Cの配列はオブジェクトではないので、フィールドがない。Cの場合は、sizeof(x)/sizeof(x[0])のように、sizeof演算子を使って、「配列全体のサイズ/配列の要素1個分のサイズ」で求める。
※Cの文字列の場合、実際に入っている文字数と入れられる最大文字数は異なる。sizeof演算子で求められるのは最大文字数の方である。実際に入っている文字数はstrlen()関数で求める。また、関数を使わないで、文字列の終わりであるヌル文字「\0」が入っている位置を見つけてもいい。
4.配列の初期化
Processing(Java)の配列は、以下のように初期化することができる。
int[] x = { 31, 20, -9 };
この場合、newでインスタンスを用意するという手続きは、明確に書かない。
※Cの場合、初期化は「int x[] = { 31, 20, -9 };」でほとんど同じ。
5.配列の要素のコピー
Processing(Java)の配列は、オブジェクトであり、配列の要素のコピーを生成するメソッドclone()が用意されている。 以下のように配列yに、配列xのコピー生成して代入することができる
int[] y = x.clone();
ちなみに、事情はここで説明しないが、cloneした結果には、以下のようにキャストを行なった方が安全である。
int[] y = (int[])x.clone();
※この方法は、浅いコピーと言われているもので、ある種の場合、完全なコピーを生成してくれるわけではない。
※Cの場合、次のようにfor文などでくり返し代入する処理を書く必要がある。Processing(Java)でもこの方法は有効である。
for (i = 0; i<配列の要素数; i++) { y[i] = x[i]; }
Todo?
浅いコピーと深いコピー、オブジェクトを要素に持った配列、etc.
0 件のコメント:
コメントを投稿