切換
舊版
前往
大廳
主題

Java Programming Lesson 09

ジャネス | 2011-08-03 18:37:06 | 巴幣 0 | 人氣 595

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章 終わり

創作回應

相關創作

更多創作