プログラム初学者にとって配列はなかなか手強い。

今回はレクチャーと問題を通して一番最初から学習していく。

これでダメならあきらめるしかない。

なおこの講座の対象者は
「一度学習したが、よくわからない。」
「配列恐怖症」
「配列がからむと問題が解けない」
といった人だ。

最初の一歩(ArrLesson1.java)

まずは以下をコメントを読みながら写経する。


public class ArrLesson1 {

	public static void main(String[] args) {
		//配列の宣言と初期化。要素数が3の配列が作られそれぞれが0で初期化される
		int[] nums=new int[3];
		System.out.println(nums.length); //3(要素数は3)
		//indexは0から始まることに注意
		System.out.println(nums[0]); //0
		System.out.println(nums[1]); //0
		System.out.println(nums[2]); //0
		
		//値を入れる
		nums[0]=10;
		nums[1]=20;
		nums[2]=30;
		//nums[3]=40;(エラーindexは0~2までしかない)
		
		//値を見る
		System.out.println(nums[0]); //10
		
		//配列の値の取り出しと代入(20+30の結果がnums[0]に代入される)
		nums[0]=nums[1]+nums[2];
		System.out.println(nums[0]); //50
				
	}
}

ArrLesson2.javaを作成し以下の指示通りにプログラムを作成しよう。

1.要素数が5のint型配列(変数名:data)を宣言せよ。
2.先頭の要素を出力せよ。
3.要素数を出力せよ。
4.先頭の要素に100を代入せよ。
5.最後の要素に150を代入せよ。
6.index2の要素に120を代入せよ。
7.index2の要素の値からindex0の要素の値を引いたものをindex1の要素に代入せよ。
8.index1の要素を出力せよ。

[解答例]

public class ArrLesson2 {
	public static void main(String[] args) {
		//1
		int[] data=new int[5];
		//2
		System.out.println(data[0]);
		//3
		System.out.println(data.length);
		//4
		data[0]=100;
		//5
		data[data.length-1]=150; //data[4]=150でもよいがこういった表現も覚えること
		//6
		data[2]=120;
		//7
		data[1]=data[2]-data[0];
		//8
		System.out.println(data[1]);
	}
}

ここまではOKだろうか?だめな場合はArrLesson1の写経からやり直しだ。
クリアした人は次に進んでほしい。

ArrLesson3.javaを写経する。

import java.util.Arrays;
public class ArrLesson3 {
	public static void main(String[] args) {
		// 宣言と同時なら{}での代入OK
		int[] dataA = { 3, 5, 10 };
		// こういった書き方もある
		int[] dataB = new int[] { 4, 6, 10 };
		// 配列の要素を全部回すパターン1
		for (int i = 0; i < dataA.length; i++) {
			System.out.println(dataA[i]);
		}
		// 配列の要素を全部回すパターン2(拡張for文)
		for (int n : dataB) {
			System.out.println(n);
		}
		// 配列の内容を出力([3,5,10]と出力される)
		System.out.println(Arrays.toString(dataA));
	}
}

刺し身といったら醤油。配列といったらfor文だ。この部分は大事なので10回写経してもよい。

ArrLesson4.javaを作成し以下の指示通りにプログラムを作成しよう。

1.int型の配列を宣言と同時に{4,8,10}で初期化せよ。(配列変数名:arrA)
2.int型の配列を宣言と同時にnew int[]{7,1,3}で初期化せよ。(配列変数名:arrB)
3.for文でarrAの値をすべて出力せよ。
4.拡張for文を使ってarrBの値をすべて出力せよ。
5.要素数が3のint型配列を宣言せよ。(配列変数名:arrC)
6.for文を使ってarrCの要素それぞれにarrAの要素を2倍した値を代入せよ。(結果arrCは[8,16,20]となる)
7.arrCの内容が[8,16,20]になってることをArrays.toStringを使って使って確認せよ。
8.for文を使ってarrCの要素それぞれにarrBの要素を加えよ。(結果arrCは[15,17,23]となる)
9.arrCの内容が[15,17,23]になってることをArrays.toStringを使って使って確認せよ。
10.合計を管理するint型の整数sumを宣言し、0で初期化する。
11.拡張for文を用いてarrCの値の合計を求める。
12.arrCの合計を「合計は55です。」という形式で出力する。

[解答例]

import java.util.Arrays;
public class ArrLesson2 {
	public static void main(String[] args) {
		//1
		int[] arrA = { 4, 8, 10 };
		//2
		int[] arrB = new int[] { 7, 1, 3 };
		//3
		for (int i = 0; i < arrA.length; i++) {
			System.out.println(arrA[i]);
		}
		//4
		for (int n : arrB) {
			System.out.println(n);
		}
		//5
		int[] arrC = new int[3];
		//6
		for (int i = 0; i < arrC.length; i++) {
			arrC[i] = arrA[i] * 2;
		}
		//7
		System.out.println(Arrays.toString(arrC));
		//8
		for(int i=0;i<arrC.length;i++){
			arrC[i]=arrC[i]+arrB[i];
		}
		//9
		System.out.println(Arrays.toString(arrC));
		//10
		int sum=0;
		//11
		for(int n:arrC){
			sum+=n;
		}
		//12
		System.out.println("合計は"+sum+"です。");
	}
}


確認テスト

では配列の基本を理解したか確認してみよう。

問)
1~6の目がランダムに出るサイコロを10回振り、その目を配列に格納してく。
そして、その結果を出力する。ただし出力フォーマットは実行例のようにすること
[実行例]
[1, 6, 1, 5, 4, 2, 1, 1, 4, 1]
解)

import java.util.Arrays;
import java.util.Random;

public class ArrTest {
	public static void main(String[] args) {
		Random rand=new Random();
		int[] nums=new int[10];
		for(int i=0;i<nums.length;i++){
			nums[i]=rand.nextInt(6)+1;
		}
		System.out.println(Arrays.toString(nums));
	}
}