第11週目演習

下準備

テストドライバの導入

第11回目分のテストドライバを導入する。以下の手順で行う。

  1. ダウンロード のページを開く (ここをクリック)
  2. プロジェクト「java20XX」にある「test」の左側の「+」をクリック
  3. ツリーが展開されるので「install-libraries.xml」を右クリック
  4. 「実行(R)」にマウスカーソルを合わせる
  5. 「1 Ant ビルド」をクリック
  6. 「コンソール」タブに"BUILD SUCCESSFUL"と表示されれば成功
  7. eclipseの画面でプロジェクト「java20XX」を右クリック
  8. メニューが表示されるので、「更新」あるいは「最新表示」をクリック
  9. "week11.zip" をデスクトップなどにダウンロード
  10. eclipseの画面でプロジェクト「java20XX」を右クリック
  11. メニューから「インポート(I)」を選択
  12. 「インポート」ウィンドウが表示されるので、「Zip ファイル」を選択
  13. 「次へ(N)」をクリック
  14. 宛先フォルダー(L): が「java20XX」になっていることを確認
  15. From zip file: の右側にある 「参照(R)...」あるいは「ブラウズ(R)...」をクリック
  16. ファイルダイアログが表示されるので、ダイアログ内に表示されたダウンロードしたファイルをダブルクリック
  17. 前の画面に戻るので、From zip file: のエリアに正しいパスが入力されていることを確認
  18. フォルダ「/」の左にチェックがついていることを確認 (ついていなければチェックボックスをクリック)
  19. 「警告を出さずに既存リソースを上書き」にチェックがついていることを確認 (上書きしたくないファイルがある場合はチェックを外す)
  20. 「終了 (F)」をクリック

第11週目テストドライバの導入に成功すると、java20XX プロジェクトの test フォルダに j1.lesson11.xml というフォルダが作成される。

パッケージの作成

過去の演習を参考にして、「j1.lesson11」というパッケージを作成する。

配列を使用したプログラム

出席カードからクラス毎の出席者数を計算するプログラムを作成する。

このプログラムでは、学籍番号の下4桁を格納した配列を作成し、その配列に入っているデータを元にそれぞれのクラスを判定し、クラス別に学生をカウントする。

擬似コードの作成

「プログラム全体」の擬似コード

プログラム全体の擬似コードは以下のようにする。とりあえずこの演習内では出席カード一覧の配列を以下のように設定することにする。

プログラム全体
    出席カード一覧 = 次の要素を持つ配列 {
          50, 1010, 1073, 1200, 1076,
        1182, 1099, 1197, 1052,   53,
         160,   51, 2100,  161, 1188,
          56, 1180,  163,    0, 1000 }
    クラスごとの出席数 = クラスごとに出席をカウント(出席カード一覧)
    print "Aクラス: クラスごとの出席者数[0]人", 改行
    print "Bクラス: クラスごとの出席者数[1]人", 改行
    print "Cクラス: クラスごとの出席者数[2]人", 改行
    print "Dクラス: クラスごとの出席者数[3]人", 改行
    print "?クラス: クラスごとの出席者数[4]人", 改行

「クラスごとに出席をカウント」という手続きをあいまいにしているため、次の擬似コードで詳細化する。

「クラスごとに出席をカウント」の擬似コード

本学部では、学籍番号の下4桁のうち、上2桁によってクラスを判定できる。詳しくは第06週の演習を参照のこと。

クラスごとに出席をカウント(学籍番号一覧)
    クラスごとの出席者数 = 長さ5の新しい配列
    クラスごとの出席者数の各要素を0に設定
    for i を 0 から 学籍番号一覧の個数 - 1
        switch 学籍番号一覧[i]の下2桁を削った値
            0のとき
                クラスごとの出席者数[0] を1加算し、switch を抜ける
            1のとき
                クラスごとの出席者数[1] を1加算し、switch を抜ける
            10のとき
                クラスごとの出席者数[2] を1加算し、switch を抜ける
            11のとき
                クラスごとの出席者数[3] を1加算し、switch を抜ける
            それ以外
                クラスごとの出席者数[4] を1加算し、switch を抜ける
    クラスごとの出席者数を返す

この擬似コードでは、「クラスごとの出席者数」という配列を次のように使っている。

インデックス 意味
[0] Aクラスの出席者数
[1] Bクラスの出席者数
[2] Cクラスの出席者数
[3] Dクラスの出席者数
[4] 不明なクラスの出席者数

骨格の作成

クラスの作成

以下の手順で、パッケージ「j1.lesson11」に「Attendance」クラスを作成する。

  1. 先ほど作成したパッケージ 「j1.lesson11」の上で右クリック
  2. マウスカーソルを「新規」に合わせる
  3. 「クラス」をクリック
  4. クラス名は Attendance とする

擬似コードの貼り付け (骨格のみ)

作成したクラスに、各擬似コードの名前を貼り付ける。

package j1.lesson11;

public class Attendance {
    // プログラム全体
    // クラスごとに出席をカウント(学籍番号一覧)
}

mainメソッドの作成 (骨格のみ)

擬似コード「プログラム全体」に合わせて、クラス「Attendance」内にpublic static void main(String[] args) から始まるメソッドを作成する。

countByEachClass メソッドの作成

擬似コード「クラスごとに出席をカウント(学籍番号一覧)」に合わせて、クラス「Attendance」内に「countByEachClass」という名前を持ち、仮引数に int[] 型を取るメソッドを作成する。また、メソッドの戻り値は int[] とする。骨格だけでよいのでメソッドの中身は return new int[0]; とでも書いておく。

仮引数の名前は何でもよいが、ここではその意味を考えて attendanceCards としておく。

全体の骨格

ここまでのプログラムの骨格は以下のようになる。

package j1.lesson11;

public class Attendance {
    // プログラム全体
    public static void main(String[] args) {
    }
    // クラスごとに出席をカウント(学籍番号一覧)
    public static int[] countByEachClass(int[] attendanceCards) {
        return new int[0];
    }
}

骨格テスト

ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。

「Attendance に対する骨格テスト」 を実行する。

骨格テストを行った際に緑のバーが表示されれば、外側から見たプログラムの骨格は正しくなっている。

赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。

メッセージ 詳細
(クラス名), existence j1.lesson11 に対象のクラスが存在していない。パッケージやクラス名を確認
(メソッド名), existence 指定されたメソッドが存在しない
(メソッド名), public メソッドを作る際に public が抜けている
(メソッド名), static メソッドを作る際に static が抜けている
(メソッド名), type <T> メソッドを作る際に戻り値の型を間違えている (正しくは <T>)

プログラムへの変換

countByEachClass メソッドの実装

メソッド countByEachClass の中身を記述する。

まずは擬似コードをコメントとして貼り付ける

// クラスごとに出席をカウント(学籍番号一覧)
public static int[] countByEachClass(int[] attendanceCards) {
    // クラスごとの出席者数 = 長さ5の新しい配列
    // クラスごとの出席者数の各要素を0に設定
    // for i を 0 から 学籍番号一覧の個数 - 1
        // switch 学籍番号一覧[i]の下2桁を削った値
            // 0のとき
                // クラスごとの出席者数[0] を1加算し、switch を抜ける
            // 1のとき
                // クラスごとの出席者数[1] を1加算し、switch を抜ける
            // 10のとき
                // クラスごとの出席者数[2] を1加算し、switch を抜ける
            // 11のとき
                // クラスごとの出席者数[3] を1加算し、switch を抜ける
            // それ以外
                // クラスごとの出席者数[4] を1加算し、switch を抜ける
    // クラスごとの出席者数を返す
    
    return new int[0];
}

これを元にプログラムを作成する。書き終わったら最後に入れていたダミーの return 文はいらないので削除する。

// クラスごとに出席をカウント(学籍番号一覧)
public static int[] countByEachClass(int[] attendanceCards) {
    // クラスごとの出席者数 = 長さ5の新しい配列
    int[] turnouts = new int[5];

    // クラスごとの出席者数の各要素を0に設定

    // for i を 0 から 学籍番号一覧の個数 - 1
    for (int i = 0; i < attendanceCards.length; i++) {
        // switch 学籍番号一覧[i]の下2桁を削った値
        switch (attendanceCards[i] / 100) {
            // 0のとき
            case 0:
                // クラスごとの出席者数[0] を1加算し、switch を抜ける
                turnouts[0]++;
                break;
            // 1のとき
            case 1:
                // クラスごとの出席者数[1] を1加算し、switch を抜ける
                turnouts[1]++;
                break;
            // 10のとき
            case 10:
                // クラスごとの出席者数[2] を1加算し、switch を抜ける
                turnouts[2]++;
                break;
            // 11のとき
            case 11:
                // クラスごとの出席者数[3] を1加算し、switch を抜ける
                turnouts[3]++;
                break;
            // それ以外
            default:
                // クラスごとの出席者数[4] を1加算し、switch を抜ける
                turnouts[4]++;
                break;
        }
    }

    // クラスごとの出席者数を返す
    return turnouts;
}

Javaでは、配列を作成した瞬間に各要素の値が 0 に設定されるため、「クラスごとの出席者数の各要素を0に設定」という擬似コードはプログラム上では無視される。

countByEachClass のテスト

余裕があれば、countByEachClass に対する単体テストを作成せよ。もし時間が無い場合は、次のようにmainメソッド内にテスト用のコードを書いて実行してみること。

public static void main(String[] args) {
    int[] testPattern = {
                0,
              100,  101,
             1000, 1001, 1002,
             1100, 1101, 1102, 1103,
             -1, 200, 1200, 2000, 9999 };
    int[] testResult = countByEachClass(testPattern);
    System.out.println(testResult[0]);
    System.out.println(testResult[1]);
    System.out.println(testResult[2]);
    System.out.println(testResult[3]);
    System.out.println(testResult[4]);
}

main メソッドの実装

続けて、先ほど作成した Attendance クラスの main メソッドの中身を記述する。

まずは擬似コードをコメントとして貼り付ける。

// プログラム全体
public static void main(String[] args) {
    // 出席カード一覧 = 次の要素を持つ配列 {
    //       50, 1010, 1073, 1200, 1076,
    //     1182, 1099, 1197, 1052,   53,
    //      160,   51, 2100,  161, 1188,
    //       56, 1180,  163,    0, 1000 }
    // クラスごとの出席数 = クラスごとに出席をカウント(出席カード一覧)
    // print "Aクラス: クラスごとの出席者数[0]人", 改行
    // print "Bクラス: クラスごとの出席者数[1]人", 改行
    // print "Cクラス: クラスごとの出席者数[2]人", 改行
    // print "Dクラス: クラスごとの出席者数[3]人", 改行
    // print "?クラス: クラスごとの出席者数[4]人", 改行
}

これを元にプログラムを作成する。

// プログラム全体
public static void main(String[] args) {
    // 出席カード一覧 = 次の要素を持つ配列 {
    //       50, 1010, 1073, 1200, 1076,
    //     1182, 1099, 1197, 1052,   53,
    //      160,   51, 2100,  161, 1188,
    //       56, 1180,  163,    0, 1000 }
    int[] attendanceCards = {
              50, 1010, 1073, 1200, 1076,
            1182, 1099, 1197, 1052,   53,
             160,   51, 2100,  161, 1188,
              56, 1180,  163,    0, 1000 };
    // クラスごとの出席数 = クラスごとに出席をカウント(出席カード一覧)
    int[] turnouts = countByEachClass(attendanceCards);
    // print "Aクラス: クラスごとの出席者数[0]人", 改行
    System.out.println("Aクラス" + turnouts[0] + "人");
    // print "Bクラス: クラスごとの出席者数[1]人", 改行
    System.out.println("Bクラス" + turnouts[1] + "人");
    // print "Cクラス: クラスごとの出席者数[2]人", 改行
    System.out.println("Cクラス" + turnouts[2] + "人");
    // print "Dクラス: クラスごとの出席者数[3]人", 改行
    System.out.println("Dクラス" + turnouts[3] + "人");
    // print "?クラス: クラスごとの出席者数[4]人", 改行
    System.out.println("?クラス" + turnouts[4] + "人");
}

全体的には下記のようなプログラムにする。

package j1.lesson11;

public class Attendance {

    // プログラム全体
    public static void main(String[] args) {
        // 出席カード一覧 = 次の要素を持つ配列 {
        //       50, 1010, 1073, 1200, 1076,
        //     1182, 1099, 1197, 1052,   53,
        //      160,   51, 2100,  161, 1188,
        //       56, 1180,  163,    0, 1000 }
        int[] attendanceCards = {
                  50, 1010, 1073, 1200, 1076,
                1182, 1099, 1197, 1052,   53,
                 160,   51, 2100,  161, 1188,
                  56, 1180,  163,    0, 1000 };
        // クラスごとの出席数 = クラスごとに出席をカウント(出席カード一覧)
        int[] turnouts = countByEachClass(attendanceCards);
        // print "Aクラス: クラスごとの出席者数[0]人", 改行
        System.out.println("Aクラス" + turnouts[0] + "人");
        // print "Bクラス: クラスごとの出席者数[1]人", 改行
        System.out.println("Bクラス" + turnouts[1] + "人");
        // print "Cクラス: クラスごとの出席者数[2]人", 改行
        System.out.println("Cクラス" + turnouts[2] + "人");
        // print "Dクラス: クラスごとの出席者数[3]人", 改行
        System.out.println("Dクラス" + turnouts[3] + "人");
        // print "?クラス: クラスごとの出席者数[4]人", 改行
        System.out.println("?クラス" + turnouts[4] + "人");
    }

    // クラスごとに出席をカウント(学籍番号一覧)
    public static int[] countByEachClass(int[] attendanceCards) {
        // クラスごとの出席者数 = 長さ5の新しい配列
        int[] turnouts = new int[5];

        // クラスごとの出席者数の各要素を0に設定

        // for i を 0 から 学籍番号一覧の個数 - 1
        for (int i = 0; i < attendanceCards.length; i++) {
            // switch 学籍番号一覧[i]の下2桁を削った値
            switch (attendanceCards[i] / 100) {
                // 0のとき
                case 0:
                    // クラスごとの出席者数[0] を1加算し、switch を抜ける
                    turnouts[0]++;
                    break;
                // 1のとき
                case 1:
                    // クラスごとの出席者数[1] を1加算し、switch を抜ける
                    turnouts[1]++;
                    break;
                // 10のとき
                case 10:
                    // クラスごとの出席者数[2] を1加算し、switch を抜ける
                    turnouts[2]++;
                    break;
                // 11のとき
                case 11:
                    // クラスごとの出席者数[3] を1加算し、switch を抜ける
                    turnouts[3]++;
                    break;
                // それ以外
                default:
                    // クラスごとの出席者数[4] を1加算し、switch を抜ける
                    turnouts[4]++;
                    break;
            }
        }

        // クラスごとの出席者数を返す
        return turnouts;
    }
}

プログラムの実行

先週までと同じ手順でプログラムを実行する。

実行が成功すると、以下のように表示される。

Aクラス5人
Bクラス3人
Cクラス6人
Dクラス4人
?クラス2人

機能テスト

ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。

「Attendance に対する機能テスト」 を実行する。

赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。

メッセージ 詳細
期待された結果と異なります 出力された結果が期待された値と異なる。

機能テストの項目

項目名 テストの内容
testRun プログラムを実行

配列の逆順コピー

配列を逆順に並び替えつつコピーするプログラムを考える。

擬似コードの作成

「プログラム全体」の擬似コード

プログラム全体の擬似コードは以下のようにする。

プログラム全体
    array = 5個の要素を持つ新しい配列
    for i を 0 から 配列 a の長さ - 1
        print "値を入力:"
        array[i] = コンソール入力 (整数)
    reversed = reverse(array)
    print array
    print 改行
    print reversed

この擬似コードでは、reverse という処理を行っているため、次の擬似コードで詳細化する。

「reverse」の擬似コード

配列を逆順にコピーする場合、次のようにすればよい。

イメージとしては次のような流れになる。


これを元に、「プログラム全体」で使用されている、reverse の擬似コードは以下のようにする。

reverse(a)
    newA = a と同じ長さの新しい配列
    for i を 0 から newAの長さ - 1 まで
        newA[i]  = a[newAの長さ - 1 - i]
    newA を返す

配列の各要素を表示する擬似コード

プログラム全体の擬似コードの中に、

print array

というものがあった。しかし Javaでは System.out.print() メソッドなどを使用して配列を表示しようとすると、次のようになってしまう。

[I@119c082

ここに表示されているものは、いわゆる配列のID (のようなもの) で、配列の各要素については表示してくれない。

そこで、配列を表示するためのプログラムを作成する必要がある。

print-array(a)
    for i を 0 から a の長さ - 1
        print a[i]
        print " "

骨格の作成

クラスの作成

以下の手順で、パッケージ「j1.lesson11」に「ArrayReverse」クラスを作成する。

  1. 先ほど作成したパッケージ 「j1.lesson11」の上で右クリック
  2. マウスカーソルを「新規」に合わせる
  3. 「クラス」をクリック
  4. クラス名は ArrayReverse とする

擬似コードの貼り付け (骨格のみ)

作成したクラスに、各擬似コードの名前を貼り付ける。ただし、「プログラム全体」ではコンソールからの入力を行っていたため、import java.io.*; も追加する。

package j1.lesson11;

import java.io.*;

public class ArrayReverse {
    // プログラム全体
    // reverse(a)
    // print-array(a)
}

mainメソッドの作成 (骨格のみ)

擬似コード「プログラム全体」に合わせて、クラス「ArrayReverse」内にpublic static void main(String[] args) から始まるメソッドを作成する。ただし、擬似コード「プログラム全体」ではコンソールからの入力を行っていたので、throws IOExceptionをつける。

reverse メソッドの作成 (骨格のみ)

擬似コード「reverse」に合わせて、クラス「ArrayReverse」内に「reverse」という名前を持ち、仮引数に int[] 型を取るメソッドを作成する。また、メソッドの戻り値は逆順に並び替えた配列を返すため int[] とする。骨格だけでよいのでメソッドの中身は return new int[0]; とでも書いておく。

仮引数の名前は何でもよいが、ここでは擬似コードに合わせて a としておく。

printArray メソッドの作成 (骨格のみ)

擬似コード「print-array」に合わせて、クラス「ArrayReverse」内に「printArray」という名前を持ち、仮引数に int[] 型を取るメソッドを作成する。

仮引数の名前は何でもよいが、ここでは擬似コードに合わせて a としておく。

全体の骨格

ここまでのプログラムの骨格は以下のようになる。

package j1.lesson11;

import java.io.*;

public class ArrayReverse {
    // プログラム全体
    public static void main(String[] args) throws IOException {
    }
    // reverse(a)
    public static int[] reverse(int[] a) {
        return new int[0];
    }
    // print-array(a)
    public static void printArray(int[] a) {
    }
}

骨格テスト

ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。

「ArrayReverse に対する骨格テスト」 を実行する。

骨格テストを行った際に緑のバーが表示されれば、外側から見たプログラムの骨格は正しくなっている。

赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。

メッセージ 詳細
(クラス名), existence j1.lesson11 に対象のクラスが存在していない。パッケージやクラス名を確認
(メソッド名), existence 指定されたメソッドが存在しない
(メソッド名), public メソッドを作る際に public が抜けている
(メソッド名), static メソッドを作る際に static が抜けている
(メソッド名), type <T> メソッドを作る際に戻り値の型を間違えている (正しくは <T>)
(メソッド名), throws java.io.IOException メソッドを作る際に throws IOException が抜けている

プログラムへの変換

reverse メソッドの実装

メソッド reverse の中身を記述する。

まずは擬似コードをコメントとして貼り付ける

// reverse(a)
public static int[] reverse(int[] a) {
    // newA = a と同じ長さの新しい配列
    // for i を 0 から newAの長さ - 1 まで
        // newA[i] = a[newAの長さ - 1 - i]
    // newA を返す
    
    return new int[0];
}

これを元にプログラムを作成する。書き終わったら最後に入れていたダミーの return 文はいらないので削除する。

// reverse(a)
public static int[] reverse(int[] a) {
    // newA = a と同じ長さの新しい配列
    int[] newA = new int[a.length];
    // for i を 0 から newAの長さ - 1 まで
    for (int i = 0; i < newA.length; i++) {
        // newA[i] = a[newAの長さ - 1 - i]
        newA[i] = a[newA.length - 1 - i];
    }
    // newA を返す
    return newA;
}

printArray メソッドの実装

メソッド printArray の中身を記述する。

まずは擬似コードをコメントとして貼り付ける

// print-array(a)
public static void printArray(int[] a) {
    // for i を 0 から a の長さ - 1
        // print a[i]
        // print " "
}

これを元にプログラムを作成する。

// print-array(a)
public static void printArray(int[] a) {
    // for i を 0 から a の長さ - 1
    for (int i = 0; i < a.length; i++) {
        // print a[i]
        System.out.print(a[i]);
        // print " "
        System.out.print(" ");
    }
}

reverse, printArray メソッドのテスト

余裕があれば、reverse, printArray に対する単体テストを作成せよ。もし時間が無い場合は、次のようにmainメソッド内にテスト用のコードを書いて実行してみること。

public static void main(String[] args) {
    int[] testPattern = {1, 2, 3};
    int[] testResult = reverse(testResult);
    printArray(testPattern);
    System.out.println("");
    printArray(testResult);
}

main メソッドの実装

続けて、先ほど作成した ArrayReverse クラスの main メソッドの中身を記述する。

まずは擬似コードをコメントとして貼り付ける。

// プログラム全体
public static void main(String[] args) throws IOException {
    // array = 5個の要素を持つ新しい配列
    // for i を 0 から 配列 a の長さ - 1
        // print "値を入力:"
        // array[i] = コンソール入力 (整数)
    // reversed = reverse(array)
    // print array
    // print 改行
    // print reversed
}

これを元にプログラムを作成する。

// プログラム全体
public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    // array = 5個の要素を持つ新しい配列
    int[] array = new int[5];

    // for i を 0 から 配列 a の長さ - 1
    for (int i = 0; i < array.length; i++) {
        // print "値を入力:"
        System.out.print("値を入力:");
        // array[i] = コンソール入力 (整数)
        array[i] = Integer.parseInt(reader.readLine());
    }

    // reversed = reverse(array)
    int[] reversed = reverse(array);
    // print array
    printArray(array);
    // print 改行
    System.out.println("");
    // print reversed
    printArray(reversed);
}

上記のプログラム内にある「print 改行」を表すJavaの命令

System.out.println("");

は、以下の命令が同じ意味になる。

System.out.println();

このように、引数に何も取らない場合は改行のみを表示する。つまり、空の文字列 ("") を表示した後に改行と同じになる。

全体的には下記のようなプログラムにする。

package j1.lesson11;

import java.io.*;

public class ArrayReverse {

    // プログラム全体
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // array = 5個の要素を持つ新しい配列
        int[] array = new int[5];

        // for i を 0 から 配列 a の長さ - 1
        for (int i = 0; i < array.length; i++) {
            // print "値を入力:"
            System.out.print("値を入力:");
            // array[i] = コンソール入力 (整数)
            array[i] = Integer.parseInt(reader.readLine());
        }

        // reversed = reverse(array)
        int[] reversed = reverse(array);
        // print array
        printArray(array);
        // print 改行
        System.out.println("");
        // print reversed
        printArray(reversed);
    }

    // reverse(a)
    public static int[] reverse(int[] a) {
        // newA = a と同じ長さの新しい配列
        int[] newA = new int[a.length];
        // for i を 0 から newAの長さ - 1 まで
        for (int i = 0; i < newA.length; i++) {
            // newA[i] = a[newAの長さ - 1 - i]
            newA[i] = a[newA.length - 1 - i];
        }
        // newA を返す
        return newA;
    }
    
    // print-array(a)
    public static void printArray(int[] a) {
        // for i を 0 から a の長さ - 1
        for (int i = 0; i < a.length; i++) {
            // print a[i]
            System.out.print(a[i]);
            // print " "
            System.out.print(" ");
        }
    }
}

プログラムの実行

先週までと同じ手順でプログラムを実行する。

入力に 1, 2, 3, 4, 5 と順に与えてやると、以下のように表示される。

値を入力:1
値を入力:2
値を入力:3
値を入力:4
値を入力:5
1 2 3 4 5 
5 4 3 2 1 

機能テスト

ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。

「ArrayReverse に対する機能テスト」 を実行する。

赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。

メッセージ 詳細
期待された結果と異なります 出力された結果が期待された値と異なる。

機能テストの項目

項目名 テストの内容
testRun 入力に 1, 2, 3, 4, 5 を与えてプログラムを実行