配列

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

a[0] = 1; a[1] = a[0] + 2;

配列の大きさ

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

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

例

int[] a;
a = new int[ 100];
for ( i = 0; i < a. length; i++)
a[ i] = 0;

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

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

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

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

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

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

３～４行目で用いられている変数iの宣言も必要だが（説明と関係ないので）省略した。

演習

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

# include < stdio. h>
# define N 1000
int main() {
int i, p, w[ N];
for ( i = 0; i < N; i++)
w[ i] = 1;
for ( p = 2; p < N; p++) {
if ( w[ p] ) {
printf( "%8d", p);
for ( i = 2* p; i < N; i += p)
w[ i] = 0;
}
}
}

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

ファイル名はLesson3.javaとすること。

慣習に従って、美しいプログラムにすること。

Nは定数として記述しなさい。

Nを別の値にしたいときは、定数記述の１箇所だけの修正ですむようにすること。

wをboolean型配列として宣言し、サイズNで割り当てなさい。

wの配列要素に値を代入しているところが２箇所あります。

正しいbooleanの値を代入するように修正しなさい。

その他、必要な修正を行って正しく動作するようにしなさい。

(1)

上のCプログラムと同じ動作をするプログラムを作成しなさい。

(2)

求まった素数の個数と、求まった素数のうち最大のもの１つだけを表示するように修正しなさい。

(3)

あなたが使っているJava処理系で、どのくらい大きなNまで処理できるか調べなさい。

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

コンパイルできること。

配列をnewで確保できること。

ある程度の時間内に実行できること。

正しく処理されること。

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

> java -Xmx500m Lesson3

大文字Xと小文字xに注意

500m の部分に使用するヒープメモリサイズを書く

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

> time java Lesson3

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