第06週目演習

下準備

テストドライバの導入

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

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

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

パッケージの作成

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

学籍番号からクラスを割り出すプログラム

コンソールに4桁の整数を入力させてその値を学籍番号の下4桁とみなし、クラスを判定する。

演習

クラスの作成

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

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

mainメソッドの作成

先と同じ手順で、クラス「Id2Class」内にpublic static void main(String[] args) throws IOException から始まるメソッドを作成する。

このプログラムでは「コンソールからの入力を取得」を行うため、importや throws IOException を忘れないこと。

骨格テスト

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

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

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

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

メッセージ 詳細
クラスが存在しません j1.lesson06 に Id2Class クラスが存在していない。パッケージやクラス名を確認
クラスがpublicで宣言されていません class の前に public の指定がない。
mainメソッドが存在しません public static void main(String[]) が存在していない。mainという名前やString[]の部分を確認
mainメソッドがpublicで宣言されていません mainメソッドを作る際に public が抜けている。
mainメソッドがstaticで宣言されていません mainメソッドを作る際に static が抜けている。
mainメソッドがvoidで宣言されていません mainメソッドを作る際に void 以外を指定している。
mainメソッドにthrows IOExceptionの指定がありません mainメソッドを作る際にthrows IOExceptionの指定を行っていない。

プログラムの作成

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

全体的には下記のようなプログラムにする。ただし、一文書くごとにCtrl+Sで保存とコンパイルを行い、常に文法エラーが発生していないことを確認すること。

package j1.lesson06;

import java.io.*;

public class Id2Class {

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("学籍番号の下4桁を入力:");
        int id = Integer.parseInt(reader.readLine());

        // id = 学科番号 * 1000 + クラス番号 * 100 + 2桁の出席番号
        switch (id / 100) {
            case  0:
                System.out.println("Aクラス");
                break;
            case  1:
                System.out.println("Bクラス");
                break;
            case 10:
                System.out.println("Cクラス");
                break;
            case 11:
                System.out.println("Dクラス");
                break;
            default:
                System.out.println("不明なクラス");
        }
    }
}

プログラムの実行

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

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

ここで、:の右側をクリックして 0199 と入力し、Enterキーを押す。すると、プログラムは最後まで進んで次のように表示される。

学籍番号の下4桁を入力:0199
Bクラス

他にも、自分の学籍番号の下4桁を入力して試してみよ。

機能テスト

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

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

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

メッセージ 詳細
余計な入力を待っていると考えられます コンソール入力を取得する命令を2回以上行っていないか確認
次の入力を変換できませんでした (???) ??? を取得しようとして失敗している。コンソール入力を取得する命令を確認
期待された結果と異なります 出力された結果が期待された値と異なる。「期待された値」と「実際の値」を比較 (エラーメッセージが出力されているエリアの下のほうにあるバーをスクロールさせれば見ることができる) し確認。他にも直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す

テスト項目一覧

テスト失敗時に「Results」の欄の左側に出る「test~」は、テストの項目名を表している。

テスト項目名 テスト内容
test0000 入力が0000
test0100 入力が0100
test1000 入力が1000
test1100 入力が1100
test0200 入力が0200
test2000 入力が2000
test0099 入力が0099
test9999 入力が9999

解説

解説のために、プログラムに行番号をつけて解説する。

01: package j1.lesson06;
02: 
03: import java.io.*;
04: 
05: public class Id2Class {
06: 
07:     public static void main(String[] args) throws IOException {
08:         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
09: 
10:         System.out.print("学籍番号の下4桁を入力:");
11:         int id = Integer.parseInt(reader.readLine());
12: 
13:         // id = 学科番号 * 1000 + クラス番号 * 100 + 2桁の出席番号
14:         switch (id / 100) {
15:             case  0:
16:                 System.out.println("Aクラス");
17:                 break;
18:             case  1:
19:                 System.out.println("Bクラス");
20:                 break;
21:             case 10:
22:                 System.out.println("Cクラス");
23:                 break;
24:             case 11:
25:                 System.out.println("Dクラス");
26:                 break;
27:             default:
28:                 System.out.println("不明なクラス");
29:         }
30:     }
31: }

プロジェクトの持ち運び (eclipse)

eclipseの使い方 にある「6.1. プロジェクトのexport」を参考に、演習環境を持ち運びできる状態にせよ。

  1. プロジェクト「java20XX」の上で右クリック
  2. メニューが表示されるので、「更新」あるいは「最新表示」をクリック
  3. プロジェクト「java20XX」の上で右クリック
  4. メニューが表示されるので「エクスポート(O)」をクリック
  5. 「エクスポート」ウィンドウが表示されるので、「Zip ファイル」を選択
  6. 「次へ(N)」をクリック
  7. java20XXの左にあるチェックボックスにチェックを入れておく
  8. java20XXの左にある「+」をクリック
  9. ツリーが展開されるので、「bin」のチェックを外す
  10. 「bin」以外の全てのディレクトリにはチェックがついていることを確認する
  11. 右側にある全てのファイルにチェックがついていることを確認する
  12. java20XXのチェックボックスが灰色になったことを確認する
  13. オプションの「Create only selected directories」をクリックして選択
  14. To zip file: の右側にある「参照(R)...」あるいは「ブラウズ(R)...」をクリック
  15. 「Export To Zip File」ダイアログが表示されるので、左側にある「デスクトップ」をクリック
  16. ファイル名(N): に 「java20XX」と入力 (他の名前でも良いが、java2007として話を進める)
  17. 「保存(S)」をクリック
  18. 前の画面に戻るので、To zip file: のエリアに"C:\Documents and Settings\(学籍番号)\デスクトップ\java20XX.zip"と表示されていることを確認
  19. 右下の「終了(F)」をクリック

作成したjava20XX.zipはメールなどで自分自身に送り、自分のノートPCなどで受信すること (受信は授業時間内に行わなくても良い)。受信をしたら、eclipseの使い方 にある「6.2. プロジェクトのimport」を参考に、各自のマシンに演習と同様の環境を作成すること。

定期的にexportを行い、作成したZIPファイルをメールで送るなどしておくこと。