Java言語プログラミングレッスン上巻
★★★★★
第09章:配列
変数の復習
。変数を作る(宣言)
。変数に入れる(代入・初期化)
。変数の中身を見る(参照)
配列の宣言
。型+配列+変数(例:int[] ten;)
。型+変数+配列(例:int ten[];)
。配列の型表記(同じ意味)
配列 型の直後 変数名の直後
一次元 int[] ten; int ten[];
二次元 int[][] tens; int tens[][];
配列の確保
。new 型名[要素の個数](例:ten = new int[3];)
。変数に番号をつけて並べたもの
。配列の長さは正数(0以上)
。配列の長さは負数(0以下)なら、実行時に例外が発生する
。配列の要素は必ず0番目から始まります
。配列の添字は0から始まる
。配列の初期化
配列の型[] 配列 = {要素, 要素, 要素, 要素, 要素};
例:int[] ten = {63, 90, 75, 45, 81}
int ten[] = {63, 90, 75, 45, 81}
。配列にまとめて代入
配列 = new 配列の型[] {要素, 要素, 要素, 要素, 要素};
例:ten = new int[] {63, 90, 75, 45, 81}
Heikin1.java(国語・数学・英語の平均点を計算するプログラム)
----------
public class Heikin1 {
public static void main(String[] args) {
int kokugo, suugaku, eigo;
double heikin;
kokugo = 63;
suugaku = 90;
eigo = 75;
heikin = (kokugo + suugaku + eigo) / 3.0;
System.out.println("国語は" + kokugo + "点");
System.out.println("数学は" + suugaku + "点");
System.out.println("英語は" + eigo + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin1.java
java Heikin1
国語は63点
数学は90点
英語は75点
平均点は76.0点
----------
Heikin2.java(配列を使ったプログラム)
----------
public class Heikin2 {
public static void main(String[] args) {
int [] ten;
double heikin;
ten = new int[3];
ten[0] = 63;
ten[1] = 90;
ten[2] = 75;
heikin = (ten[0] +ten[1] +ten[2]) / 3.0;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin2.java
java Heikin2
国語は63点
数学は90点
英語は75点
平均点は76.0点
----------
配列の要素と変数の比較
比較 int[]型の変数 int型の変数
-- -------------- ------
宣言 int[] ten; int kokugo, suugaku, eigo;
確保 ten = new int[3]; (不要)
代入 ten[0] = 63; kokugo = 63;
ten[1] = 90; suugaku = 90;
ten[2] = 75; eigo = 75;
参照 System.out.println(ten[0]); System.out.println(kokugo);
System.out.println(ten[1]); System.out.println(suugaku);
System.out.println(ten[2]); System.out.println(eigo);
-- -------------- ------
Heikin3.java(配列の添字を変数にする)
----------
public class Heikin3 {
public static void main(String[] args) {
int[] ten;
int sum;
double heikin;
ten = new int[3];
ten[0] = 63;
ten[1] = 90;
ten[2] = 75;
sum = 0;
for (int i = 0; i < 3; i++) {
sum = sum + ten[i];
}
heikin = sum / 3.0;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin3.java
java Heikin3
国語は63点
数学は90点
英語は75点
平均点は76.0点
----------
Heikin4.java(配列の長さを5にする)
----------
public class Heikin4 {
public static void main(String[] args) {
int[] ten;
int sum;
double heikin;
ten = new int[5];
ten[0] = 63;
ten[1] = 90;
ten[2] = 75;
ten[3] = 45;
ten[4] = 81;
sum = 0;
for (int i = 0; i < ten.length; i++) {
sum = sum + ten[i];
}
heikin = (double)sum / ten.length;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("理科は" + ten[3] + "点");
System.out.println("社会は" + ten[4] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin4.java
java Heikin4
国語は63点
数学は90点
英語は75点
理科は45点
社会は81点
平均点は70.8点
----------
Heikin5.java(配列の初期化)
----------
public class Heikin5 {
public static void main(String[] args) {
int[] ten = { 63, 90, 75, 45, 81 };
int sum = 0;
for (int i = 0; i < ten.length; i++) {
sum = sum + ten[i];
}
double heikin = (double)sum / ten.length;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("理科は" + ten[3] + "点");
System.out.println("社会は" + ten[4] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin5.java
java Heikin5
国語は63点
数学は90点
英語は75点
理科は45点
社会は81点
平均点は70.8点
----------
Heikin6.java(2次元配列で小さな表計算)
----------
public class Heikin6 {
public static void main(String[] args) {
int[][] tens = {
{ 63, 90, 75, 45, 81 },
{ 85, 100, 95, 80, 90 },
{ 100, 100, 100, 100, 100 },
};
for (int i = 0; i < tens.length; i++) {
int sum = 0;
for (int j = 0; j < tens[i].length; j++) {
System.out.print("\t" + tens[i][j]);
sum = sum + tens[i][j];
}
System.out.println("\t| " + (double)sum / tens[i].length);
}
}
}
----------
画面に
javac Heikin6.java
java Heikin6
63 90 75 45 81 | 70.8
85 100 95 80 90 | 90.0
100 100 100 100 100 | 100.0
----------
ShowArgs.java(コマンドラインの引数を表示する)
----------
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] + " です。");
}
}
}
----------
画面に
javac ShowArgs.java
java ShowArgs This is good
args.length の値は 3
args[0] の値は This です。
args[1] の値は is です。
args[2] の値は good です。
----------
Kamoku.java(科目を表すクラス)
----------
// 科目を表すクラス(科目目と点数の組)
public class Kamoku {
String namae; // 科目目
int tensuu; // 点数
// 科目の作成
public Kamoku(String namae, int tensuu) {
this.namae = namae;
this.tensuu = tensuu;
}
// 科目の文字列表現
public String toString() {
return namae + "は" + tensuu + "点";
}
}
----------
Heikin7.java(科目を表すクラスの利用)
----------
public class Heikin7 {
public static void main(String[] args) {
Kamoku[] kamoku = {
new Kamoku("国語", 63),
new Kamoku("数学", 90),
new Kamoku("英語", 75),
new Kamoku("理科", 45),
new Kamoku("社会", 81),
};
int sum = 0;
for (int i = 0; i < kamoku.length; i++) {
System.out.println(kamoku[i]);
sum += kamoku[i].tensuu;
}
double heikin = (double)sum / kamoku.length;
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Kamoku.java Heikin7.java
java Heikin7
国語は63点
数学は90点
英語は75点
理科は45点
社会は81点
平均点は70.8点
----------
学んだこと
。配列の宣言・初期化と代入・参照
。配列の要素・長さ
。添字
。二次元配列
練習問題9-1
配列の宣言として正しいものは
X (1) int a[3];
配列の長さは配列宣言の[]に書かない
書き直し:int a[];
int[] a;
int a[] = new int[3];
X (2) int[] a = int[3];
new が抜けています
書き直し:int[] a = new int[3];
O (3) int[] a = new int[3];
X (4) int[3] a = { 10, 20, 30 };
配列の長さは配列宣言の[]に書かない
書き直し:int[] a = { 10, 20, 30 };
O (5) int[] a = { 10, 20, 30, };
練習問題9-2
配列を int[] a = new int[100]; と宣言したとき、
a[1]~a[100] の100個の要素が使える。
正ですか?
答え:
誤っています。
配列の要素は0番目からなので
配列を int[] a = new int[100]; と宣言したとき、
a[0]~a[99] の100個の要素が使える。
練習問題9-3
次のfor文を実行した後、a[5]の値は何になりますか。
int[] a = new int[10];
for (int i = 0; i < 10; i++);
a[i] = i * i;
}
添字の2乗が配列の要素の値になります
したがって、a[5]の値は25です。
ArrayCalc.java(配列の計算)
----------
public class ArrayCalc {
public static void main(String[] args) {
int[] a = new int[10];
for (int i = 0; i < 10; i++) {
a[i] = i * i;
System.out.println("a[" + i + "] = " + i + " x " + i + " = " + (i * i));
}
}
}
----------
画面に
javac ArrayCalc.java
java ArrayCalc
a[0] = 0 x 0 = 0
a[1] = 1 x 1 = 1
a[2] = 2 x 2 = 4
a[3] = 3 x 3 = 9
a[4] = 4 x 4 = 16
a[5] = 5 x 5 = 25
a[6] = 6 x 6 = 36
a[7] = 7 x 7 = 49
a[8] = 8 x 8 = 64
a[9] = 9 x 9 = 81
----------
練習問題9-4
次のfor文を実行した後、a[5]の値は何になりますか。
int[] a = new int[10];
a[0] = 0;
for (int i = 0; i < 10; i++);
a[i] = a[i - 1] + i;
}
a[5]の値は15です。
ArrayCalc2.java(配列の計算)
----------
public class ArrayCalc2 {
public static void main(String[] args) {
int[] a = new int[10];
a[0] = 0;
System.out.println("a[0] = " + a[0]);
for (int i = 1; i < 10; i++) {
a[i] = a[i - 1] + i;
System.out.println("a[" + i +"] = a[" + (i - 1) + "] + " + i + " = " + a[i]);
}
}
}
----------
画面に
javac ArrayCalc2.java
java ArrayCalc2
a[0] = 0
a[1] = a[0] + 1 = 1
a[2] = a[1] + 2 = 3
a[3] = a[2] + 3 = 6
a[4] = a[3] + 4 = 10
a[5] = a[4] + 5 = 15
a[6] = a[5] + 6 = 21
a[7] = a[6] + 7 = 28
a[8] = a[7] + 8 = 36
a[9] = a[8] + 9 = 45
----------
練習問題9-5
CalcData.java(どうしてエラーになるのでしょうか)
----------
public class CalcData {
public static void main(String[] args) {
double[] data;
data = new double[5];
data[0] = 3.1;
data[1] = 4.1;
data[2] = 5.9;
data[3] = 2.6;
data[4] = 5.3;
data[5] = 9.7;
double sum = 0.0;
for (int i = 0; i <= data.length; i++) {
sum += data[i];
}
System.out.println("sum = " + sum);
}
}
----------
画面に
javac CalcData.java
java CalcData
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at CalcData.main(CalcData.java:10)
----------
java.lang.ArrayIndexOutOfBoundsExceptionは、配列の添字が範囲を超えているという例外です。
10行目のdata[5]は6個目の配列要素で配列の長さ(5個)を超えてしまいました。
もう1つの誤りは、i <= data.length ではなく、i < data.lengthです。
CalcData1.java(見直しプログラム)
----------
public class CalcData1 {
public static void main(String[] args) {
double[] data;
data = new double[6];
data[0] = 3.1;
data[1] = 4.1;
data[2] = 5.9;
data[3] = 2.6;
data[4] = 5.3;
data[5] = 9.7;
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
System.out.println("sum = " + sum);
}
}
----------
画面に
javac CalcData1.java
java CalcData1
sum = 30.7
----------
練習問題9-6
SelectGreeting.java(番号指定のあいさつプログラム)
----------
public class SelectGreeting {
public static void main(String[] args) {
String[] message;
message = new String[3];
message[0] = "おはよう!";
message[1] = "こんにちは!";
message[2] = "こんばんは!";
if (args.length != 1) {
System.out.println("使い方:java SelectGreeting 番号");
System.exit(0);
}
int num = Integer.parseInt(args[0]);
if (0 <= num && num < message.length) {
System.out.println(message[num]);
} else {
System.out.println("番号は0~" + 2 + "の範囲で指定してください。");
}
}
}
----------
画面に
javac SelectGreeting.java
java SelectGreeting
使い方:java SelectGreeting 番号
java SelectGreeting 0
おはよう!
java SelectGreeting 1
こんにちは!
java SelectGreeting 2
こんばんは!
java SelectGreeting 3
番号は0~2の範囲で指定してください。
java SelectGreeting -100
番号は0~2の範囲で指定してください。
----------
SelectGreeting1.java(番号指定のあいさつプログラム、別解)
----------
public class SelectGreeting1 {
public static void main(String[] args) {
String[] message = {
"おはよう!",
"こんにちは!",
"こんばんは!",
};
if (args.length != 1) {
System.out.println("使い方:java SelectGreeting 番号");
System.exit(0);
}
int num = Integer.parseInt(args[0]);
if (0 <= num && num < message.length) {
System.out.println(message[num]);
} else {
System.out.println("番号は0~" + (message.length - 1) + "の範囲で指定してください。");
}
}
}
----------
画面に
javac SelectGreeting1.java
java SelectGreeting1
使い方:java SelectGreeting1 番号
java SelectGreeting1 0
おはよう!
java SelectGreeting1 1
こんにちは!
java SelectGreeting1 2
こんばんは!
java SelectGreeting1 3
番号は0~2の範囲で指定してください。
----------
練習問題9-7
ShowMaxData.java(最大値を求めましょう)
----------
public class ShowMaxData {
public static void main(String[] args) {
int[] data = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84 };
int max_data = data[0];
for (int i = 0; i < data.length; i++) {
if (max_data < data[i]) {
max_data = data[i];
}
}
System.out.println("最大値は" + max_data + "です。");
}
}
----------
画面に
javac ShowMaxData.java
java ShowMaxData
最大値は97です。
----------
ShowMaxData.java(最大値を求めましょう、別解)
----------
public class ShowMaxData {
public static void main(String[] args) {
int[] data = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84 };
int max_data = data[0];
for (int i = 0; i < data.length; i++) {
System.out.print("Count " + i + ": Last Max is " + max_data + ", next data is " + data[i]);
if (max_data < data[i]) {
max_data = data[i];
}
System.out.println(", New Max is " + max_data);
}
System.out.println("最大値は" + max_data + "です。");
}
}
----------
画面に
javac ShowMaxData.java
java ShowMaxData
Count 0: Last Max is 31, next data is 31, New Max is 31
Count 1: Last Max is 31, next data is 41, New Max is 41
Count 2: Last Max is 41, next data is 59, New Max is 59
Count 3: Last Max is 59, next data is 26, New Max is 59
Count 4: Last Max is 59, next data is 53, New Max is 59
Count 5: Last Max is 59, next data is 58, New Max is 59
Count 6: Last Max is 59, next data is 97, New Max is 97
Count 7: Last Max is 97, next data is 93, New Max is 97
Count 8: Last Max is 97, next data is 23, New Max is 97
Count 9: Last Max is 97, next data is 84, New Max is 97
最大値は97です。
----------
練習問題9-8
SortData.java(ソートプログラム)
----------
public class SortData {
public static void main(String[] args) {
int[] data = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84 };
System.out.println("並べ替える前");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
System.out.println("");
for (int i = 0; i < data.length; i++) {
for (int j = i + 1; j < data.length; j++) {
if (data[i] > data[j]) {
// 交換
int temp;
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
System.out.println("並べ替えた後");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
System.out.println("");
}
}
----------
画面に
javac SortData.java
java SortData
並べ替える前
31 41 59 26 53 58 97 93 23 84
並べ替えた後
23 26 31 41 53 58 59 84 93 97
----------
練習問題9-9
PrintArray.java(二次元配列の内容を表示するメソッド)
----------
public class PrintArray {
public static void main(String[] args) {
int[][] arr = {
{ 3, 1, 4, 1, },
{ 5, 9, 2, },
{ 6, 5, },
{ 3, },
};
printArray(arr);
}
public static void printArray(int[][] a) {
System.out.println("{");
for (int i = 0; i < a.length; i++) {
System.out.print(" { ");
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + ", ");
}
System.out.println("},");
}
System.out.println("}");
}
}
----------
画面に
javac PrintArray.java
java PrintArray
{
{ 3, 1, 4, 1, },
{ 5, 9, 2, },
{ 6, 5, },
{ 3, },
}
----------
★★★★★
第9章 終わり
★★★★★
第09章:配列
変数の復習
。変数を作る(宣言)
。変数に入れる(代入・初期化)
。変数の中身を見る(参照)
配列の宣言
。型+配列+変数(例:int[] ten;)
。型+変数+配列(例:int ten[];)
。配列の型表記(同じ意味)
配列 型の直後 変数名の直後
一次元 int[] ten; int ten[];
二次元 int[][] tens; int tens[][];
配列の確保
。new 型名[要素の個数](例:ten = new int[3];)
。変数に番号をつけて並べたもの
。配列の長さは正数(0以上)
。配列の長さは負数(0以下)なら、実行時に例外が発生する
。配列の要素は必ず0番目から始まります
。配列の添字は0から始まる
。配列の初期化
配列の型[] 配列 = {要素, 要素, 要素, 要素, 要素};
例:int[] ten = {63, 90, 75, 45, 81}
int ten[] = {63, 90, 75, 45, 81}
。配列にまとめて代入
配列 = new 配列の型[] {要素, 要素, 要素, 要素, 要素};
例:ten = new int[] {63, 90, 75, 45, 81}
Heikin1.java(国語・数学・英語の平均点を計算するプログラム)
----------
public class Heikin1 {
public static void main(String[] args) {
int kokugo, suugaku, eigo;
double heikin;
kokugo = 63;
suugaku = 90;
eigo = 75;
heikin = (kokugo + suugaku + eigo) / 3.0;
System.out.println("国語は" + kokugo + "点");
System.out.println("数学は" + suugaku + "点");
System.out.println("英語は" + eigo + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin1.java
java Heikin1
国語は63点
数学は90点
英語は75点
平均点は76.0点
----------
Heikin2.java(配列を使ったプログラム)
----------
public class Heikin2 {
public static void main(String[] args) {
int [] ten;
double heikin;
ten = new int[3];
ten[0] = 63;
ten[1] = 90;
ten[2] = 75;
heikin = (ten[0] +ten[1] +ten[2]) / 3.0;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin2.java
java Heikin2
国語は63点
数学は90点
英語は75点
平均点は76.0点
----------
配列の要素と変数の比較
比較 int[]型の変数 int型の変数
-- -------------- ------
宣言 int[] ten; int kokugo, suugaku, eigo;
確保 ten = new int[3]; (不要)
代入 ten[0] = 63; kokugo = 63;
ten[1] = 90; suugaku = 90;
ten[2] = 75; eigo = 75;
参照 System.out.println(ten[0]); System.out.println(kokugo);
System.out.println(ten[1]); System.out.println(suugaku);
System.out.println(ten[2]); System.out.println(eigo);
-- -------------- ------
Heikin3.java(配列の添字を変数にする)
----------
public class Heikin3 {
public static void main(String[] args) {
int[] ten;
int sum;
double heikin;
ten = new int[3];
ten[0] = 63;
ten[1] = 90;
ten[2] = 75;
sum = 0;
for (int i = 0; i < 3; i++) {
sum = sum + ten[i];
}
heikin = sum / 3.0;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin3.java
java Heikin3
国語は63点
数学は90点
英語は75点
平均点は76.0点
----------
Heikin4.java(配列の長さを5にする)
----------
public class Heikin4 {
public static void main(String[] args) {
int[] ten;
int sum;
double heikin;
ten = new int[5];
ten[0] = 63;
ten[1] = 90;
ten[2] = 75;
ten[3] = 45;
ten[4] = 81;
sum = 0;
for (int i = 0; i < ten.length; i++) {
sum = sum + ten[i];
}
heikin = (double)sum / ten.length;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("理科は" + ten[3] + "点");
System.out.println("社会は" + ten[4] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin4.java
java Heikin4
国語は63点
数学は90点
英語は75点
理科は45点
社会は81点
平均点は70.8点
----------
Heikin5.java(配列の初期化)
----------
public class Heikin5 {
public static void main(String[] args) {
int[] ten = { 63, 90, 75, 45, 81 };
int sum = 0;
for (int i = 0; i < ten.length; i++) {
sum = sum + ten[i];
}
double heikin = (double)sum / ten.length;
System.out.println("国語は" + ten[0] + "点");
System.out.println("数学は" + ten[1] + "点");
System.out.println("英語は" + ten[2] + "点");
System.out.println("理科は" + ten[3] + "点");
System.out.println("社会は" + ten[4] + "点");
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Heikin5.java
java Heikin5
国語は63点
数学は90点
英語は75点
理科は45点
社会は81点
平均点は70.8点
----------
Heikin6.java(2次元配列で小さな表計算)
----------
public class Heikin6 {
public static void main(String[] args) {
int[][] tens = {
{ 63, 90, 75, 45, 81 },
{ 85, 100, 95, 80, 90 },
{ 100, 100, 100, 100, 100 },
};
for (int i = 0; i < tens.length; i++) {
int sum = 0;
for (int j = 0; j < tens[i].length; j++) {
System.out.print("\t" + tens[i][j]);
sum = sum + tens[i][j];
}
System.out.println("\t| " + (double)sum / tens[i].length);
}
}
}
----------
画面に
javac Heikin6.java
java Heikin6
63 90 75 45 81 | 70.8
85 100 95 80 90 | 90.0
100 100 100 100 100 | 100.0
----------
ShowArgs.java(コマンドラインの引数を表示する)
----------
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] + " です。");
}
}
}
----------
画面に
javac ShowArgs.java
java ShowArgs This is good
args.length の値は 3
args[0] の値は This です。
args[1] の値は is です。
args[2] の値は good です。
----------
Kamoku.java(科目を表すクラス)
----------
// 科目を表すクラス(科目目と点数の組)
public class Kamoku {
String namae; // 科目目
int tensuu; // 点数
// 科目の作成
public Kamoku(String namae, int tensuu) {
this.namae = namae;
this.tensuu = tensuu;
}
// 科目の文字列表現
public String toString() {
return namae + "は" + tensuu + "点";
}
}
----------
Heikin7.java(科目を表すクラスの利用)
----------
public class Heikin7 {
public static void main(String[] args) {
Kamoku[] kamoku = {
new Kamoku("国語", 63),
new Kamoku("数学", 90),
new Kamoku("英語", 75),
new Kamoku("理科", 45),
new Kamoku("社会", 81),
};
int sum = 0;
for (int i = 0; i < kamoku.length; i++) {
System.out.println(kamoku[i]);
sum += kamoku[i].tensuu;
}
double heikin = (double)sum / kamoku.length;
System.out.println("平均点は" + heikin + "点");
}
}
----------
画面に
javac Kamoku.java Heikin7.java
java Heikin7
国語は63点
数学は90点
英語は75点
理科は45点
社会は81点
平均点は70.8点
----------
学んだこと
。配列の宣言・初期化と代入・参照
。配列の要素・長さ
。添字
。二次元配列
練習問題9-1
配列の宣言として正しいものは
X (1) int a[3];
配列の長さは配列宣言の[]に書かない
書き直し:int a[];
int[] a;
int a[] = new int[3];
X (2) int[] a = int[3];
new が抜けています
書き直し:int[] a = new int[3];
O (3) int[] a = new int[3];
X (4) int[3] a = { 10, 20, 30 };
配列の長さは配列宣言の[]に書かない
書き直し:int[] a = { 10, 20, 30 };
O (5) int[] a = { 10, 20, 30, };
練習問題9-2
配列を int[] a = new int[100]; と宣言したとき、
a[1]~a[100] の100個の要素が使える。
正ですか?
答え:
誤っています。
配列の要素は0番目からなので
配列を int[] a = new int[100]; と宣言したとき、
a[0]~a[99] の100個の要素が使える。
練習問題9-3
次のfor文を実行した後、a[5]の値は何になりますか。
int[] a = new int[10];
for (int i = 0; i < 10; i++);
a[i] = i * i;
}
添字の2乗が配列の要素の値になります
したがって、a[5]の値は25です。
ArrayCalc.java(配列の計算)
----------
public class ArrayCalc {
public static void main(String[] args) {
int[] a = new int[10];
for (int i = 0; i < 10; i++) {
a[i] = i * i;
System.out.println("a[" + i + "] = " + i + " x " + i + " = " + (i * i));
}
}
}
----------
画面に
javac ArrayCalc.java
java ArrayCalc
a[0] = 0 x 0 = 0
a[1] = 1 x 1 = 1
a[2] = 2 x 2 = 4
a[3] = 3 x 3 = 9
a[4] = 4 x 4 = 16
a[5] = 5 x 5 = 25
a[6] = 6 x 6 = 36
a[7] = 7 x 7 = 49
a[8] = 8 x 8 = 64
a[9] = 9 x 9 = 81
----------
練習問題9-4
次のfor文を実行した後、a[5]の値は何になりますか。
int[] a = new int[10];
a[0] = 0;
for (int i = 0; i < 10; i++);
a[i] = a[i - 1] + i;
}
a[5]の値は15です。
ArrayCalc2.java(配列の計算)
----------
public class ArrayCalc2 {
public static void main(String[] args) {
int[] a = new int[10];
a[0] = 0;
System.out.println("a[0] = " + a[0]);
for (int i = 1; i < 10; i++) {
a[i] = a[i - 1] + i;
System.out.println("a[" + i +"] = a[" + (i - 1) + "] + " + i + " = " + a[i]);
}
}
}
----------
画面に
javac ArrayCalc2.java
java ArrayCalc2
a[0] = 0
a[1] = a[0] + 1 = 1
a[2] = a[1] + 2 = 3
a[3] = a[2] + 3 = 6
a[4] = a[3] + 4 = 10
a[5] = a[4] + 5 = 15
a[6] = a[5] + 6 = 21
a[7] = a[6] + 7 = 28
a[8] = a[7] + 8 = 36
a[9] = a[8] + 9 = 45
----------
練習問題9-5
CalcData.java(どうしてエラーになるのでしょうか)
----------
public class CalcData {
public static void main(String[] args) {
double[] data;
data = new double[5];
data[0] = 3.1;
data[1] = 4.1;
data[2] = 5.9;
data[3] = 2.6;
data[4] = 5.3;
data[5] = 9.7;
double sum = 0.0;
for (int i = 0; i <= data.length; i++) {
sum += data[i];
}
System.out.println("sum = " + sum);
}
}
----------
画面に
javac CalcData.java
java CalcData
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at CalcData.main(CalcData.java:10)
----------
java.lang.ArrayIndexOutOfBoundsExceptionは、配列の添字が範囲を超えているという例外です。
10行目のdata[5]は6個目の配列要素で配列の長さ(5個)を超えてしまいました。
もう1つの誤りは、i <= data.length ではなく、i < data.lengthです。
CalcData1.java(見直しプログラム)
----------
public class CalcData1 {
public static void main(String[] args) {
double[] data;
data = new double[6];
data[0] = 3.1;
data[1] = 4.1;
data[2] = 5.9;
data[3] = 2.6;
data[4] = 5.3;
data[5] = 9.7;
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
System.out.println("sum = " + sum);
}
}
----------
画面に
javac CalcData1.java
java CalcData1
sum = 30.7
----------
練習問題9-6
SelectGreeting.java(番号指定のあいさつプログラム)
----------
public class SelectGreeting {
public static void main(String[] args) {
String[] message;
message = new String[3];
message[0] = "おはよう!";
message[1] = "こんにちは!";
message[2] = "こんばんは!";
if (args.length != 1) {
System.out.println("使い方:java SelectGreeting 番号");
System.exit(0);
}
int num = Integer.parseInt(args[0]);
if (0 <= num && num < message.length) {
System.out.println(message[num]);
} else {
System.out.println("番号は0~" + 2 + "の範囲で指定してください。");
}
}
}
----------
画面に
javac SelectGreeting.java
java SelectGreeting
使い方:java SelectGreeting 番号
java SelectGreeting 0
おはよう!
java SelectGreeting 1
こんにちは!
java SelectGreeting 2
こんばんは!
java SelectGreeting 3
番号は0~2の範囲で指定してください。
java SelectGreeting -100
番号は0~2の範囲で指定してください。
----------
SelectGreeting1.java(番号指定のあいさつプログラム、別解)
----------
public class SelectGreeting1 {
public static void main(String[] args) {
String[] message = {
"おはよう!",
"こんにちは!",
"こんばんは!",
};
if (args.length != 1) {
System.out.println("使い方:java SelectGreeting 番号");
System.exit(0);
}
int num = Integer.parseInt(args[0]);
if (0 <= num && num < message.length) {
System.out.println(message[num]);
} else {
System.out.println("番号は0~" + (message.length - 1) + "の範囲で指定してください。");
}
}
}
----------
画面に
javac SelectGreeting1.java
java SelectGreeting1
使い方:java SelectGreeting1 番号
java SelectGreeting1 0
おはよう!
java SelectGreeting1 1
こんにちは!
java SelectGreeting1 2
こんばんは!
java SelectGreeting1 3
番号は0~2の範囲で指定してください。
----------
練習問題9-7
ShowMaxData.java(最大値を求めましょう)
----------
public class ShowMaxData {
public static void main(String[] args) {
int[] data = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84 };
int max_data = data[0];
for (int i = 0; i < data.length; i++) {
if (max_data < data[i]) {
max_data = data[i];
}
}
System.out.println("最大値は" + max_data + "です。");
}
}
----------
画面に
javac ShowMaxData.java
java ShowMaxData
最大値は97です。
----------
ShowMaxData.java(最大値を求めましょう、別解)
----------
public class ShowMaxData {
public static void main(String[] args) {
int[] data = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84 };
int max_data = data[0];
for (int i = 0; i < data.length; i++) {
System.out.print("Count " + i + ": Last Max is " + max_data + ", next data is " + data[i]);
if (max_data < data[i]) {
max_data = data[i];
}
System.out.println(", New Max is " + max_data);
}
System.out.println("最大値は" + max_data + "です。");
}
}
----------
画面に
javac ShowMaxData.java
java ShowMaxData
Count 0: Last Max is 31, next data is 31, New Max is 31
Count 1: Last Max is 31, next data is 41, New Max is 41
Count 2: Last Max is 41, next data is 59, New Max is 59
Count 3: Last Max is 59, next data is 26, New Max is 59
Count 4: Last Max is 59, next data is 53, New Max is 59
Count 5: Last Max is 59, next data is 58, New Max is 59
Count 6: Last Max is 59, next data is 97, New Max is 97
Count 7: Last Max is 97, next data is 93, New Max is 97
Count 8: Last Max is 97, next data is 23, New Max is 97
Count 9: Last Max is 97, next data is 84, New Max is 97
最大値は97です。
----------
練習問題9-8
SortData.java(ソートプログラム)
----------
public class SortData {
public static void main(String[] args) {
int[] data = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84 };
System.out.println("並べ替える前");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
System.out.println("");
for (int i = 0; i < data.length; i++) {
for (int j = i + 1; j < data.length; j++) {
if (data[i] > data[j]) {
// 交換
int temp;
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
System.out.println("並べ替えた後");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
System.out.println("");
}
}
----------
画面に
javac SortData.java
java SortData
並べ替える前
31 41 59 26 53 58 97 93 23 84
並べ替えた後
23 26 31 41 53 58 59 84 93 97
----------
練習問題9-9
PrintArray.java(二次元配列の内容を表示するメソッド)
----------
public class PrintArray {
public static void main(String[] args) {
int[][] arr = {
{ 3, 1, 4, 1, },
{ 5, 9, 2, },
{ 6, 5, },
{ 3, },
};
printArray(arr);
}
public static void printArray(int[][] a) {
System.out.println("{");
for (int i = 0; i < a.length; i++) {
System.out.print(" { ");
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + ", ");
}
System.out.println("},");
}
System.out.println("}");
}
}
----------
画面に
javac PrintArray.java
java PrintArray
{
{ 3, 1, 4, 1, },
{ 5, 9, 2, },
{ 6, 5, },
{ 3, },
}
----------
★★★★★
第9章 終わり