第 6 回: 配列, 配列の宣言, 確保, 添字, 2 次元配列, コマンドラインの引数, オブジェクト指向

配列

配列は, 変数に番号を付けて並べたものと考えられる.

変数の場合:

1. 宣言 (変数を作る)
2. 代入, 初期化 (変数にいれる)
3. 参照 (変数の中身をみる)

Average1.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public class Average1{
    public static void main(String[] args){
	int yamada, ueda, oda;
	double average;

	yamada = 99;
	ueda = 47;
	oda = 64;
	average = (yamada + ueda + oda) / 3.0;

	System.out.println("山田は " + yamada + " 点");
	System.out.println("上田は " + ueda + " 点");
	System.out.println("小田は " + oda + " 点");
	System.out.println("平均点は " + average + "点");
    }
}

Average1.java の実行結果は:

[wtopia koji]$ java Average1
山田は 99 点
上田は 47 点
小田は 64 点
平均点は 70.0点

配列の場合:

Average2.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class Average2{
    public static void main(String[] args){
	int[] point;
	double average;

	point = new int[3];

	point[0] = 99;
	point[1] = 47;
	point[2] = 64;

	average = (point[0] + point[1] + point[2]) / 3.0;

	System.out.println("山田は " + point[0] + " 点");
	System.out.println("上田は " + point[1] + " 点");
	System.out.println("小田は " + point[2] + " 点");
	System.out.println("平均点は " + average + " 点");
    }
}

Average2.java の実行結果は:

[wtopia koji]$ java Average2
山田は 99 点
上田は 47 点
小田は 64 点
平均点は 70.0 点

配列の宣言

型名[] 配列の変数名

例:

int[] point;

配列の確保

配列の変数名 = new 型名[要素の個数]

例:

point = new int[3];

添字 (index)

Average3.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Average3{
    public static void main(String[] args){
	int[] point;
	int sum;
	double average;

	point = new int[3];
	point[0] = 99;
	point[1] = 47;
	point[2] = 64;

	sum = 0;
	for(int i = 0; i < 3; i++){
	    sum += point[i];
	}
	average = sum / 3.0;

	System.out.println("山田は " + point[0] + " 点");
	System.out.println("上田は " + point[1] + " 点");
	System.out.println("小田は " + point[2] + " 点");
	System.out.println("平均点は " + average + " 点");
    }
}

Average3.java の実行結果は:

[wtopia koji]$ java Average3
山田は 99 点
上田は 47 点
小田は 64 点
平均点は 70.0 点

Average4.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Average4{
    public static void main(String[] args){
	int[] point;
	int sum;
	double average;

	point = new int[5];
	point[0] = 99;
	point[1] = 47;
	point[2] = 64;
	point[3] = 43;
	point[4] = 72;

	sum = 0;
	for(int i = 0; i < point.length; i++){
	    sum += point[i];
	}
	average = (double)sum / point.length;
	System.out.println("山田は " + point[0] + " 点");
	System.out.println("上田は " + point[1] + " 点");
	System.out.println("小田は " + point[2] + " 点");
	System.out.println("幸田は " + point[3] + " 点");
	System.out.println("井田は " + point[4] + " 点");
	System.out.println("平均点は " + average + " 点");
    }
}

Average4.java の実行結果は:

[wtopia koji]$ java Average4
山田は 99 点
上田は 47 点
小田は 64 点
幸田は 43 点
井田は 72 点
平均点は 65.0 点

Average5.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public class Average5{
    public static void main(String[] args){
	int[] point = {99, 47, 64, 43, 72};
	int sum = 0;

	for(int i = 0; i < point.length; i++){
	    sum += point[i];
	}
	double average = (double)sum / point.length;

	System.out.println("山田は " + point[0] + " 点");
	System.out.println("上田は " + point[1] + " 点");
	System.out.println("小田は " + point[2] + " 点");
	System.out.println("幸田は " + point[4] + " 点");
	System.out.println("平均点は " + average + " 点");
    }
}

Average5.java の実行結果は:

[wtopia koji]$ java Average5
山田は 99 点
上田は 47 点
小田は 64 点
幸田は 72 点
平均点は 65.0 点

二次元配列

Average6.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class Average6{
    public static void main(String[] args){
	int[][] points = {
	    {99, 47, 64, 43, 72},
	    {100, 60, 62, 70, 64},
	    {100, 50, 60, 40, 78},
	    {45, 55, 65, 75, 85, 92},
	    {1, 2, 3},
	};
	for(int i = 0; i < points.length; i++){
	    int sum = 0;
	    for(int j = 0; j < points[i].length; j++){
		System.out.print("\t" + points[i][j]);
		sum += points[i][j];
	    }
	    System.out.println("\t| " +  (double)sum / points[i].length);
	}
    }
}

Average6.java の実行結果は:

[wtopia koji]$ java Average6
      99      47      64      43      72      | 65.0
      100     60      62      70      64      | 71.2
      100     50      60      40      78      | 65.6
      45      55      65      75      85      92      | 69.5
      1       2       3       | 2.0

コマンドラインの引数

ShowArgs.java

1
2
3
4
5
6
7
8
public class ShowArgs{
    public static void main(String[] args){
	System.out.println("args.length の値は " + args.length);
	for(int i = 0; i < args.length; i++){
	    System.out.println("args[" + i + "]の値は" + args[i] + "です");
	}
    }
}

ShowArgs.java の実行結果は:

[wtopia koji]$ java ShowArgs -a -b -c
args.length の値は 3
args[0]の値は-aです
args[1]の値は-bです
args[2]の値は-cです

オブジェクト指向

メソッド toString は, オブジェクトの情報を文字列で返すメソッド

Average7.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
public class Average7{
    public static void main(String[] args){
	Seiseki[] seiseki = {
	    new Seiseki("山田", 99),
	    new Seiseki("上田", 47),
	    new Seiseki("小田", 64),
	    new Seiseki("幸田", 43),
	    new Seiseki("井田", 72),
	    new Seiseki("ヒヒ", 100),
	};

	int sum = 0;
	for(int i = 0; i < seiseki.length; i++){
	    System.out.println(seiseki[i]);
	    sum += seiseki[i].point;
	}
	double average = (double)sum / seiseki.length;
	System.out.println("平均点は " + average + " 点");
    }
}

Average7.java の実行結果は:

[wtopia koji]$ javac Average7.java
[wtopia koji]$ java Average7
Seiseki@1749757 ( toString() ではない )
Seiseki@17bd6a1 ( toString() ではない )
Seiseki@147ee05 ( toString() ではない )
Seiseki@15b9e68 ( toString() ではない )
Seiseki@1fcf0ce ( toString() ではない )
Seiseki@1256ea2 ( toString() ではない )
平均点は 70.83333333333333 点
[wtopia koji]$ javac Average7.java
[wtopia koji]$ java Average7
山田は 99 点 ( toString() である )
上田は 47 点 ( toString() である )
小田は 64 点 ( toString() である )
幸田は 43 点 ( toString() である )
井田は 72 点 ( toString() である )
ヒヒは 100 点 ( toString() である )
平均点は 70.83333333333333 点