第02週目演習

下準備

テストドライバの導入

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

  1. ダウンロード のページを開く (ここをクリック)
  2. プロジェクト「java20XX」にある「test」の左側の「+」をクリック
  3. ツリーが展開されるので「install-libraries.xml」を右クリック
  4. 「実行(R)」にマウスカーソルを合わせる
  5. 「1 Ant ビルド」をクリック
  6. 「コンソール」タブに"BUILD SUCCESSFUL"と表示されれば成功
  7. eclipseの画面でプロジェクト「java20XX」を右クリック
  8. メニューが表示されるので、「更新」あるいは「最新表示」をクリック
  9. "week02.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)」をクリック

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

パッケージの作成

前回は j1.lesson01 というパッケージを作成した。演習で書いたプログラムは、この「入れ物」に入っているはず。今回は j1.lesson02 というパッケージを作成する。

パッケージの作成は毎回の演習の最初に行うことを原則とする。

以下の手順で行う。

  1. 「java20XX」プロジェクトの左側にある「+」をクリック
  2. ツリーが展開されるので、「src」の上で右クリック
  3. マウスカーソルを「新規」に合わせる
  4. 「パッケージ」をクリック
  5. 「新規 Java パッケージ」というウィンドウが開くので、
  6. 「名前」欄に半角文字 で
  7. 「j1.lesson02」と入力する 。
  8. 正しく入力できたことを確認したら、右下の「終了」ボタンをクリックして確定する。

以後、「パッケージ j1.lessonXX を作成」とあったら、上記の手順で行うこと (j1.lesson02 は j1.lessonXXと読み替える)。

式の計算を行うプログラム

演習

クラスの作成

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

  1. 先ほど作成したパッケージ「j1.lesson02」の上で右クリック
  2. マウスカーソルを「新規」に合わせる
  3. 「クラス」をクリック
  4. 新規 Java クラス」というウィンドウが開くので、
  5. 「パッケージ(K)」が先ほど入力した「j1.lesson02」になっていることを確認すること。間違っていた場合は、ここに「j1.lesson02」と入力する。
  6. 「名前(M)」に「Expressions」と入力する。
  7. 「どのメソッド・スタブを作成するか?」という項目では、全てのチェックがはずれていることを確認。
  8. 最後に、全ての項目を確認した後、右下の「終了」ボタンをクリックして確定する。

mainメソッドの作成

クラス「Expressions」内にpublic static void main(String[] args)から始まるメソッドを作成する。

全体的には次のようになる。

package j1.lesson02;

public class Expressions {
    public static void main(String[] args) {

    }
}

骨格テスト

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

保存時にエラーが出ていなければ、 以下の手順で骨格テストを実行する。

  1. testフォルダの中にある j1.lesson02.xml を右クリック
  2. 「実行」の中にある「1 Ant ビルド」を選択
  3. Jtaf ウィンドウが現れたら「ファイル」メニューから「Expressions に対する骨格テスト」を選んで実行する。

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

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

メッセージ 詳細
クラスが存在しません j1.lesson02 に Expressions クラスが存在していない。パッケージ (j1.lesson01 や (デフォルトパッケージ) になっていないかなど) やクラス名 (expressions や Expression, Expresionなどになっていないかなど) を確認
クラスがpublicで宣言されていません class の前に public の指定がない。
mainメソッドが存在しません public static void main(String[]) が存在していない。mainという名前やString[]の部分を確認
mainメソッドがpublicで宣言されていません mainメソッドを作る際に public が抜けている。
mainメソッドがstaticで宣言されていません mainメソッドを作る際に static が抜けている。
mainメソッドがvoidで宣言されていません mainメソッドを作る際に void 以外を指定している。

プログラムの作成

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

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

package j1.lesson02;

public class Expressions {
    public static void main(String[] args) {
        // 2行に分けて書く
        System.out.println("1 + 2 の結果は");
        System.out.println(1 + 2);

        // 文字列の結合
        System.out.println("(1 + 2) * 3 の結果は" + ((1 + 2) * 3) + "です");

        // Math.sqrt
        System.out.println("Math.sqrt(2.0)は" + Math.sqrt(2.0) + "です");
    }
}

プログラムの実行

作成したプログラムを実行してみる。以下の手順で行う。

  1. 「Expressions.java」の上で右クリック
  2. メニューが表示されるので、「実行(R)」にマウスカーソルを合わせる
  3. 「1 Java アプリケーション」をクリック

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

1 + 2 の結果は
3
(1 + 2) * 3 の結果は9です
Math.sqrt(2.0)は1.4142135623730951です

プログラムの一行一行と結果の出力を照らし合わせ、プログラムの挙動を考えてみよ。

機能テスト

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

保存時にエラーが出ていなければ、 以下の手順で機能テストを実行する。

  1. Jtaf ウィンドウが開いていなければ testフォルダの中にあるj1.lesson02.xml を右クリック
  2. Jtaf ウィンドウの「ファイル」メニューにある「Expressionsに対する機能テスト」を選択実行

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

以後、「骨格テストを実行」、「機能テストを実行」と言われたら、上記のような手順を踏むことを指すものとする。

メッセージ 詳細
期待された値:~..(n行目の出力) n行目の出力をが間違っている
期待された値:<(出力の終端)>.. 余計な出力を行わないこと

解説

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

01: package j1.lesson02;
02: 
03: public class Expressions {
04:     public static void main(String[] args) {
05:         // 2行に分けて書く
06:         System.out.println("1 + 2 の結果は");
07:         System.out.println(1 + 2);
08: 
09:         // 文字列の結合
10:         System.out.println("(1 + 2) * 3 の結果は" + ((1 + 2) * 3) + "です");
11: 
12:         // Math.sqrt
13:         System.out.println("Math.sqrt(2.0)は" + Math.sqrt(2.0) + "です");
14:     }
15: }

各行では次のようなことが行われている。

結果として、以下のような出力になっている。

1 + 2 の結果は
3
(1 + 2) * 3 の結果は9です
Math.sqrt(2.0)は1.4142135623730951です

変数を扱うプログラム

演習

クラスの作成

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

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

mainメソッドの作成

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

骨格テスト

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

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

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

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

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

プログラムの作成

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

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

package j1.lesson02;

public class Variables {
    public static void main(String[] args) {
        int a, b;   // int型の変数の宣言	
        a = 10;     // 初期化
        System.out.println("aの中身は" + a);

        b = a / 3;  // 代入
        System.out.println("bの中身は" + b);	
        	
        a *= 5;     // 代入その2
        System.out.println("aの中身は" + a);
        	
        b++;        // 自動インクリメント
        System.out.println("bの中身は" + b);
        	
        // double型変数
        double c = 2.0;
        double d = Math.sqrt(c);
        System.out.println("(c,d)の中身は(" + c + ", " + d + ")");        
    }
}

プログラムの実行

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

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

aの中身は10
bの中身は3
aの中身は50
bの中身は4
(c,d)の中身は(2.0, 1.4142135623730951)

プログラムの一行一行と結果の出力を照らし合わせ、プログラムの挙動を考えてみよ。

機能テスト

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

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

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

メッセージ 詳細
期待された値:~..(n行目の出力) n行目の出力をが間違っている
期待された値:<(出力の終端)>.. 余計な出力を行わないこと

解説

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

01: package j1.lesson02;
02: 
03: public class Variables {
04:     public static void main(String[] args) {
05:         int a, b;   // int型の変数の宣言	
06:         a = 10;     // 初期化
07:         System.out.println("aの中身は" + a);
08: 
09:         b = a / 3;  // 代入
10:         System.out.println("bの中身は" + b);	
11:         	
12:         a *= 5;     // 代入その2
13:         System.out.println("aの中身は" + a);
14:         	
15:         b++;        // 自動インクリメント
16:         System.out.println("bの中身は" + b);
17:         	
18:         // double型変数
19:         double c = 2.0;
10:         double d = Math.sqrt(c);
21:         System.out.println("(c,d)の中身は(" + c + ", " + d + ")");        
22:     }
23: }

各行では次のようなことが行われている。

一度に書きすぎたので、残りを分けて解説

01: package j1.lesson02;
02: 
03: public class Variables {
04:     public static void main(String[] args) {
05:         int a, b;   // int型の変数の宣言	
06:         a = 10;     // 初期化
07:         System.out.println("aの中身は" + a);
08: 
09:         b = a / 3;  // 代入
10:         System.out.println("bの中身は" + b);	
11:         	
12:         a *= 5;     // 代入その2
13:         System.out.println("aの中身は" + a);
14:         	
15:         b++;        // 自動インクリメント
16:         System.out.println("bの中身は" + b);
17:         	
18:         // double型変数
19:         double c = 2.0;
10:         double d = Math.sqrt(c);
21:         System.out.println("(c,d)の中身は(" + c + ", " + d + ")");        
22:     }
23: }