下準備
テストドライバの導入
第02回目分のテストドライバを導入する。以下の手順で行う。
- ダウンロード のページを開く (ここをクリック)
- プロジェクト「java20XX」にある「test」の左側の「+」をクリック
- ツリーが展開されるので「install-libraries.xml」を右クリック
- 「実行(R)」にマウスカーソルを合わせる
- 「1 Ant ビルド」をクリック
- 「コンソール」タブに"BUILD SUCCESSFUL"と表示されれば成功
- eclipseの画面でプロジェクト「java20XX」を右クリック
- メニューが表示されるので、「更新」あるいは「最新表示」をクリック
- "week02.zip" をデスクトップなどにダウンロード
- eclipseの画面でプロジェクト「java20XX」を右クリック
- メニューから「インポート(I)」を選択
- 「インポート」ウィンドウが表示されるので、「Zip ファイル」を選択
- 「次へ(N)」をクリック
- 宛先フォルダー(L): が「java20XX」になっていることを確認
- From zip file: の右側にある「参照(R)...」あるいは 「ブラウズ(R)...」をクリック
- ファイルダイアログが表示されるので、ダウンロードしたファイルをダブルクリック
- 前の画面に戻るので、From zip file: のエリアに正しいパスが入力されていることを確認
- フォルダ「/」の左にチェックがついていることを確認 (ついていなければチェックボックスをクリック)
- 「警告を出さずに既存リソースを上書き」にチェックがついていることを確認 (上書きしたくないファイルがある場合はチェックを外す)
- 「終了 (F)」をクリック
第02週目テストドライバの導入に成功すると、java20XX プロジェクトの test フォルダに j1.lesson02.xml というファイルが作成される。
パッケージの作成
前回は j1.lesson01 というパッケージを作成した。演習で書いたプログラムは、この「入れ物」に入っているはず。今回は j1.lesson02 というパッケージを作成する。
パッケージの作成は毎回の演習の最初に行うことを原則とする。
以下の手順で行う。
- 「java20XX」プロジェクトの左側にある「+」をクリック
- ツリーが展開されるので、「src」の上で右クリック
- マウスカーソルを「新規」に合わせる
- 「パッケージ」をクリック
- 「新規 Java パッケージ」というウィンドウが開くので、
- 「名前」欄に半角文字 で
- 「j1.lesson02」と入力する 。
- 正しく入力できたことを確認したら、右下の「終了」ボタンをクリックして確定する。
以後、「パッケージ j1.lessonXX を作成」とあったら、上記の手順で行うこと (j1.lesson02 は j1.lessonXXと読み替える)。
式の計算を行うプログラム
演習
クラスの作成
以下の手順で、パッケージ「j1.lesson02」に「Expressions」クラスを作成する。
- 先ほど作成したパッケージ「j1.lesson02」の上で右クリック
- マウスカーソルを「新規」に合わせる
- 「クラス」をクリック
- 新規 Java クラス」というウィンドウが開くので、
- 「パッケージ(K)」が先ほど入力した「j1.lesson02」になっていることを確認すること。間違っていた場合は、ここに「j1.lesson02」と入力する。
- 「名前(M)」に「Expressions」と入力する。
- 「どのメソッド・スタブを作成するか?」という項目では、全てのチェックがはずれていることを確認。
- 最後に、全ての項目を確認した後、右下の「終了」ボタンをクリックして確定する。
mainメソッドの作成
クラス「Expressions」内にpublic static void main(String[] args)から始まるメソッドを作成する。
全体的には次のようになる。
package j1.lesson02; public class Expressions { public static void main(String[] args) { } }
骨格テスト
ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。
保存時にエラーが出ていなければ、 以下の手順で骨格テストを実行する。
- testフォルダの中にある j1.lesson02.xml を右クリック
- 「実行」の中にある「1 Ant ビルド」を選択
- 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) + "です"); } }
プログラムの実行
作成したプログラムを実行してみる。以下の手順で行う。
- 「Expressions.java」の上で右クリック
- メニューが表示されるので、「実行(R)」にマウスカーソルを合わせる
- 「1 Java アプリケーション」をクリック
実行が成功すると、以下のように表示される。
1 + 2 の結果は 3 (1 + 2) * 3 の結果は9です Math.sqrt(2.0)は1.4142135623730951です
プログラムの一行一行と結果の出力を照らし合わせ、プログラムの挙動を考えてみよ。
機能テスト
ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。
保存時にエラーが出ていなければ、 以下の手順で機能テストを実行する。
- Jtaf ウィンドウが開いていなければ testフォルダの中にあるj1.lesson02.xml を右クリック
- 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: }
各行では次のようなことが行われている。
- 06行目
- 文字列 "1 + 2 の結果は" を出力
- 改行を出力
- 07行目
- 1 + 2 の結果 、つまり "3" を出力
- 改行を出力
- 10行目
- 次の3つの結果を文字列として繋ぎ合わせたものを出力。結果として "(1 + 2) * 3 の結果は9です" が出力される
- 文字列 "(1 + 2) * 3 の結果は"
- 式 ((1 + 2) * 3) の計算結果、つまり ((1 + 2) * 3) → ((3) * 3) → 9
- 文字列 "です"
- 改行を出力
- 13行目
- 次の3つの結果を文字列として繋ぎ合わせたものを出力。結果として "Math.sqrt(2.0)は1.4142135623730951です" が出力される
- 文字列 "Math.sqrt(2.0)は"
- 式 Math.sqrt(2.0) の計算結果、つまり Math.sqrt(2.0) → 1.4142135623730951
- 文字列 "です"
- 改行を出力
結果として、以下のような出力になっている。
1 + 2 の結果は 3 (1 + 2) * 3 の結果は9です Math.sqrt(2.0)は1.4142135623730951です
変数を扱うプログラム
演習
クラスの作成
以下の手順で、パッケージ「j1.lesson02」に「Variables」クラスを作成する。
- 先ほど作成したパッケージ 「j1.lesson02」の上で右クリック
- マウスカーソルを「新規」に合わせる
- 「クラス」をクリック
- クラス名は Variables とする
- 先と同じ手順でクラスを作成する
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: }
各行では次のようなことが行われている。
- 05行目
- int型の変数 a, b を作成 (まだ中に入っている値は不明)
- 06行目
- 変数 a に 10 を代入
- 07行目
- 次の2つの結果を繋ぎ合わせたものを出力。結果として "aの中身は10" が出力される。
- 文字列 "aの中身は"
- 変数 a の内容 (06行目で代入された 10)
- 改行を出力
- 09行目
- 変数 b に (変数 a の内容を 3 で割った結果) を代入 (10 / 3 → 3 を代入)
- 10行目
- 次の2つの結果を繋ぎ合わせたものを出力。結果として "bの中身は3" が出力される。
- 文字列 "bの中身は"
- 変数 b の内容 (09行目で代入された 3)
- 改行を出力
- 12行目
- 変数 a に (変数 a の内容に 5 を掛けた結果) を代入 (10 * 5 → 50 を代入)
- 13行目
- 次の2つの結果を繋ぎ合わせたものを出力。結果として "aの中身は50" が出力される。
- 文字列 "aの中身は"
- 変数 a の内容 (12行目で代入された 50)
- 改行を出力
- 15行目
- 変数 b の値を 1 増やす (3だったものを4にする)
- 16行目
- 次の2つの結果を繋ぎ合わせたものを出力。結果として "bの中身は4" が出力される。
- 文字列 "bの中身は"
- 変数 b の内容 (15行目で変更された 4)
- 改行を出力
一度に書きすぎたので、残りを分けて解説
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: }
- 19行目
- double型の変数 c を作成し
- 変数 c に 2.0 を代入
- 20行目
- double型の変数 d を作成し
- 式 Math.sqrt(c) の結果を代入 -> Math.sqrt(2.0) -> 1.4142135623730951
- 21行目
- 次の5つの結果を繋ぎ合わせたものを出力。結果として "(c,d)の中身は(2.0, 1.4142135623730951)" が出力される。
- 文字列 "(c,d)の中身は("
- 変数 c の内容 (19行目で代入された2.0)
- 文字列 ", "
- 変数 d の内容 (20行目で代入された1.4142135623730951)
- 文字列 ")"
- 改行を出力