welcome: please sign in
location: 配列

配列

配列の要素の参照や要素への値の代入などでの要素の指定方法はCと同じです。


配列の大きさ

配列の大きさは length で得ることができる。

配列の宣言と使い始めに必要な処理は異なります。

1行目の変数宣言 int[ ] a; により、変数aの場所が用意される。
a の型は int[ ] (すなわち int型の配列)であるが、変数aのために用意されるのは参照型の値が入る箱1つだけである。

2行目の new int[100] により、int型のデータが100個並んだオブジェクトが作られる。

それを a に代入することで、aを使って配列の各要素を参照できるようになる。

3~4行目では配列の要素に0を代入している。
aが参照している配列の大きさは a.length で得ることができ、繰り返しの中で利用している。

変数aの定義と配列オブジェクトの作成が別々になっていることに注意。

配列オブジェクトは実行時に作成されるので、配列の実際の大きさも(コンパイル時でなく)実行時に決まることになる。

3~4行目で用いられている変数iの宣言も必要だが(説明と関係ないので)省略した。


演習

次のCで書かれたプログラムはエラトステネスの篩を用いて1000までの素数を表示するものです。

   1 #include <stdio.h>
   2 
   3 #define N 1000
   4 
   5 int main() {
   6     int i, p, w[N];
   7 
   8     for (i = 0; i < N; i++)
   9         w[i] = 1;
  10     for (p = 2; p < N; p++) {
  11         if ( w[p] ) {
  12             printf("%8d", p);
  13             for ( i = 2*p; i < N; i += p)
  14                 w[i] = 0;
  15         }
  16     }
  17 }

これをもとにして、Javaのプログラムを作成しなさい。

(1)

(2)

(3)

上級では次の点を調べる必要があります。

  1. コンパイルできること。
  2. 配列をnewで確保できること。
  3. ある程度の時間内に実行できること。
  4. 正しく処理されること。

java コマンドにヒープサイズオプションをつけて実行すると 大きな配列を確保することができます。

演習用サーバを使っている人はlinuxのコマンドを使って実行時間を計測することができるので、 いくつかのNについて調べてみると良いでしょう。

1~3を解決してもこのプログラムでは、Nがある値を超えるとうまく処理されなくなります。 理由を考えてください。

配列 (最終更新日時 2012-03-22 01:41:33 更新者 masahiko)