Powered by SmartDoc

配列

配列とは

変数には1つの値だけしか記憶できません。複数の値を扱うには複数個の変数が必要です。複数個の変数では関連性のあるデータをまとめて扱うには不便です。そこで複数個の変数を一列に並べ、並べた順番に番号を付けて利用できるようにしたものを配列といいます。

配列のイメージは図に示すとおりで、一つ一つの要素は配列名と要素の番号を組み合わせて横方向の列という形で表記します。

配列のイメージ

配列の要素一つ一つは変数と同じなので代入や参照は変数と同様の方法でできます。要素番号は直接数値か変数や式を利用できます。

配列要素への代入、参照
A[0] = 100;
A[i] = 90;
X = X + A[1];
X = X + A[i];

配列は関連性のあるデータをまとめて扱いたいときに使います。プログラムで容易にアクセスできるので並べ替え(ソート)、検索に便利です。コマンドラインの引数をプログラムから扱うときにも利用されています。

配列の宣言

変数と同様、配列を利用するときもどんな種類のデータを扱うかを指定します。また、要素数をどれだけ確保するかも指定できます。宣言は次の書式に従います。

配列の宣言
型名 配列名[] = new 型名[要素数];

整数型で10個の要素を持つ配列Aを使いたいときは次のように宣言します。

要素数10個の整数型の配列宣言
int A[] = new int[10];

配列も変数と同様にその初期値を指定して宣言できます。たとえば、5個の要素を持つ整数型の配列Xを初期値(12,34,8,91,3)を指定して宣言は次のようになります。

初期値を指定した宣言
int X[] = {12, 34, 8, 91, 3};

配列の内容を表示する

次の例は要素数10個の整数型の配列Dの各要素の値を表示するプログラムです。

配列要素の表示例
class ArrayEx01 {
    public static void main(String args[]){
	// 配列宣言
	int D[] = {21, 33, 8, 45, 81, 51, 1, 7, 10, 0};
	// カウンター
	int C;
	// for文によるループで配列Dコマンドライン引数の値を表示
	for(C = 0; C < 10; C++){
	    System.out.println("D[" + C + "]=" + D[C]);
	}
    }
}

上記のプログラムでは配列宣言時に初期値を設定していますが、これをコマンドライン方入力するように変更すると次のようになります。

コマンドラインからの入力
class ArrayEx02 {
    public static void main(String args[]){
	// カウンター用変数
	int C;
	// for文によるループでコマンドライン引数の値を表示
	for(C = 0; C < 10; C++){
	    System.out.println("args[" + C + "]=" + args[C]);
	}
    }
}

実行は次のようにコマンドラインにデータを並べます。

コマンドラインからデータを入力
java ArrayEx02 21 33 8 45 81 51 1 7 10 0

もし、コマンドラインのデータが10個未満の場合には次のようなエラーメッセージが表示される。

要素数より少ないデータを入力した場合のメッセージ
Exception in thread "main" \
    java.lang.ArrayIndexOutOfBoundsException: 9
        at ArrayEx02.main(ArrayEx02.java:7)  

これは要素数を10個と決めているからです。この問題を回避するには継続条件を次のように書き換えればよい。

配列要素数に応じてループを制御する。
C < args.length

配列内データの合計を求める

配列内のデータの合計を計算するには以前の1から10までの合計などと同じ方法を使います。プログラムを示します。

配列内のデータの合計を求める
class ArraySum {
    public static void main(String args[]){
	// 配列を用意
	int A[] = {21, 33, 8, 45, 81, 51, 1, 7, 10, 76};
	// カウンター用変数
	int i;
	// 合計用変数
	int sum;
	// 変数初期化
	sum = 0;
	// 合計を計算し表示する
	for(i = 0; i < 10; i++){
	    sum = sum + A[i];
	    System.out.println(i + "までの和は" + sum + "です。");
	}
    }
}

コマンドラインからの入力の合計は次の通りです。

コマンドラインのデータの合計を求める
class ArraySum02 {
    public static void main(String args[]){
	// カウンター用変数
	int i;
	// 合計用変数
	int sum;
	// 変数初期化
	sum = 0;
	// コマンドラインからのデータを配列に格納しつつ、合計を計算し表示する
	for(i = 0; i < args.length; i++){
	    sum = sum + Integer.parseInt(args[i]);
	    System.out.println(i + "までの和は" + sum + "です。");
	}
    }
}

コマンドラインからのデータは文字列として扱われるので数値への変換が必要です。

配列内データの平均値を求める

合計を求め、平均を計算し表示すればよい。

フローチャートとプログラムを示す。

配列の平均値
配列内データの平均を求める
class ArrayAve01 {
    public static void main(String args[]){
	// 配列を用意
	int A[] = {21, 33, 8, 45, 81, 51, 1, 7, 10, 76};
	// カウンター用変数
	int i;
	// 合計用変数
	int sum;
	// 平均用変数
	double ave;
	// 変数初期化
	sum = 0;
	// 合計を計算(10回のループ)
	for(i = 0; i < 10; i++){
	    sum = sum + A[i];
	}
	System.out.println("合計は" + sum + "です。");
	// カウンタの値を実数にし、合計を求める
	ave = sum / (double)i;
	System.out.println("平均は" + ave + "です。");
    }
}

平均値は実数になるのでdouble型の変数にする。

演習

次の各プログラムを作りなさい。処理の流れをフローチャートで表現してプログラムにすること。なお、配列は初期値を指定して宣言する。