下準備
テストドライバの導入
「第11回基礎固め」のテストドライバを導入する。以下の手順で行う。
- ダウンロード のページを開く (ここをクリック)
- プロジェクト「java20XX」にある「test」の左側の「+」をクリック
- ツリーが展開されるので「install-libraries.xml」を右クリック
- 「実行(R)」にマウスカーソルを合わせる
- 「1 Ant ビルド」をクリック
- 「コンソール」タブに"BUILD SUCCESSFUL"と表示されれば成功
- eclipseの画面でプロジェクト「java20XX」を右クリック
- メニューが表示されるので、「最新表示」をクリック
- "week11basic.zip" をデスクトップなどにダウンロード
- eclipseの画面でプロジェクト「java20XX」を右クリック
- メニューから「インポート(I)」を選択
- 「インポート」ウィンドウが表示されるので、「Zip ファイル」あるいは「Archive ファイル」を選択
- 「次へ(N)」をクリック
- 宛先フォルダー(L): が「java20XX」になっていることを確認
- From zip file: の右側にある 「ブラウズ(R)...」をクリック
- ファイルダイアログが表示されるので、ダイアログ内に表示されたダウンロードしたファイルをダブルクリック
- 前の画面に戻るので、From zip file: のエリアに正しいパスが入力されていることを確認
- フォルダ「/」の左にチェックがついていることを確認 (ついていなければチェックボックスをクリック)
- 「Overwrite existing resources without warning」にチェックがついていることを確認 (上書きしたくないファイルがある場合はチェックを外す)
- 「終了 (F)」をクリック
「第11週基礎固め」のテストドライバの導入に成功すると、java20XX プロジェクトの test フォルダに j1.lesson11basic.xml というファイルが作成される。なお、課題1115の自動テストは含まない。
パッケージの作成
過去の演習を参考にして、「j1.lesson11basic」というパッケージを作成する。
配列を使用したプログラム
配列の内容を出力するプログラムを作成する。
このプログラムでは、整数データを格納した配列を作成し、その配列に入っているデータを分かりやすく出力する。
擬似コードの作成
「プログラム全体」の擬似コード
プログラム全体の擬似コードは以下のようにする。
プログラム全体
int型配列x = 次の要素を持つ配列 {
10, 20, 30, 40, 50,
}
配列xの各要素をスペースで区切って出力
改行を出力
int型配列yを長さ10で生成
配列yに0から9までの平方を格納する
配列yの各要素をスペースで区切って出力
改行を出力
骨格の作成
クラスの作成
以下の手順で、パッケージ「j1.lesson11basic」に「ShowArray」クラスを作成する。
- 先ほど作成したパッケージ 「j1.lesson11basic」の上で右クリック
- マウスカーソルを「新規」に合わせる
- 「クラス」をクリック
- クラス名は ShowArray とする
擬似コードの貼り付け (骨格のみ)
作成したクラスに、各擬似コードの名前を貼り付ける。
package j1.lesson11basic;
public class ShowArray {
// プログラム全体
}
mainメソッドの作成 (骨格のみ)
擬似コード「プログラム全体」に合わせて、クラス「ShowArray」内にpublic static void main(String[] args) から始まるメソッドを作成する。
全体の骨格
ここまでのプログラムの骨格は以下のようになる。
package j1.lesson11basic;
public class ShowArray {
// プログラム全体
public static void main(String[] args) {
}
}
骨格テスト
ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。
「ShowArray に対する骨格テスト」 を実行する。
骨格テストを行った際に緑のバーが表示されれば、外側から見たプログラムの骨格は正しくなっている。
赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。
| メッセージ | 詳細 |
|---|---|
| (クラス名), existence | j1.lesson11basic に対象のクラスが存在していない。パッケージやクラス名を確認 |
| (メソッド名), existence | 指定されたメソッドが存在しない |
| (メソッド名), public | メソッドを作る際に public が抜けている |
| (メソッド名), static | メソッドを作る際に static が抜けている |
| (メソッド名), type <T> | メソッドを作る際に戻り値の型を間違えている (正しくは <T>) |
プログラムへの変換
main メソッドの実装
main メソッドの中身を記述する。
まずは擬似コードをコメントとして貼り付ける
これを元にプログラムを作成する。
package j1.lesson11basic;
public class ShowArray {
// プログラム全体
public static void main(String[] args) {
// int型配列x = 次の要素を持つ配列 {
// 10, 20, 30, 40, 50}
int[] x = { 10, 20, 30, 40, 50 };
// 配列xの各要素をスペースで区切って出力
for (int i = 0; i < x.length; i++)
System.out.print(" " + x[i]);
// 改行を出力
System.out.println("");
// int型配列yを長さ10で生成
int[] y = new int[10];
// 配列yに0から9までの平方を格納する
for (int i = 0; i < 10; i++)
y[i] = i * i;
// 配列yの各要素をスペースで区切って出力
for (int i = 0; i < y.length; i++)
System.out.print(" " + y[i]);
// 改行を出力
System.out.println("");
}
}
上記のプログラム内にある「改行を出力」を表すJavaの命令
System.out.println("");
は、以下の命令と同じ意味になる。
System.out.println();
このように、引数に何も取らない場合は改行のみを表示する。つまり、空の文字列 ("") を表示した後に改行と同じになる。
プログラムの実行
先週までと同じ手順でプログラムを実行する。
実行が成功すると、以下のように表示される。
10 20 30 40 50 0 1 4 9 16 25 36 49 64 81
機能テスト
ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。
「ShowArray に対する機能テスト」 を実行する。
赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。
| メッセージ | 詳細 |
|---|---|
| 期待された結果と異なります | 出力された結果が期待された値と異なる。 |
機能テストの項目
| 項目名 | テストの内容 |
|---|---|
| testRun | プログラムを実行 |
配列の長さを実行時に決める
配列の長さsizeを入力し、続けてsize個の整数を入力し配列に格納する。配列に格納されたデータから値が60以上の要素を出力する。以上のように動くプログラムを考える。
擬似コードの作成
「プログラム全体」の擬似コード
プログラム全体の擬似コードは以下のようにする。
プログラム全体 入力の準備 配列の長さsizeを入力 長さsizeのint型配列xを生成する size個の整数データを入力し配列xに格納する 配列xの値が60以上の要素を出力
骨格の作成
クラスの作成
以下の手順で、パッケージ「j1.lesson11basic」に「DynamicArray」クラスを作成する。
- 先ほど作成したパッケージ 「j1.lesson11basic」の上で右クリック
- マウスカーソルを「新規」に合わせる
- 「クラス」をクリック
- クラス名は DynamicArray とする
mainメソッドの作成 (骨格のみ)
擬似コード「プログラム全体」に合わせて、クラス「DynamicArray」内にpublic static void main(String[] args) から始まるメソッドを作成する。ただし、擬似コード「プログラム全体」ではコンソールからの入力を行っていたので、throws IOExceptionをつける。
全体の骨格
ここまでのプログラムの骨格は以下のようになる。
package j1.lesson11basic;
import java.io.*;
public class DynamicArray {
// プログラム全体
public static void main(String[] args) throws IOException {
}
}
骨格テスト
ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。
「DynamicArray に対する骨格テスト」 を実行する。
骨格テストを行った際に緑のバーが表示されれば、外側から見たプログラムの骨格は正しくなっている。
赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。
| メッセージ | 詳細 |
|---|---|
| (クラス名), existence | j1.lesson11 に対象のクラスが存在していない。パッケージやクラス名を確認 |
| (メソッド名), existence | 指定されたメソッドが存在しない |
| (メソッド名), public | メソッドを作る際に public が抜けている |
| (メソッド名), static | メソッドを作る際に static が抜けている |
| (メソッド名), type <T> | メソッドを作る際に戻り値の型を間違えている (正しくは <T>) |
| (メソッド名), throws java.io.IOException | メソッドを作る際に throws IOException が抜けている |
プログラムへの変換
main メソッドの実装
続けて、先ほど作成した DynamicArray クラスの main メソッドの中身を記述する。
まずは擬似コードをコメントとして貼り付ける。
// プログラム全体
// 入力の準備
// 配列の長さsizeを入力
// 長さsizeのint型配列xを生成する
// size個の整数データを入力し配列xに格納する
// 配列xの値が60以上の要素を出力
これを元にプログラムを作成する。
// プログラム全体
public static void main(String[] args) throws IOException{
// 入力の準備
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 配列の長さsizeを入力
System.out.print("配列の長さを入力: ");
int size = Integer.parseInt(reader.readLine());
// 長さsizeのint型配列xを生成する
int[] x = new int[size];
// size個の整数データを入力し配列xに格納する
for(int i=0; i<x.length; i++){
System.out.print("第" + i + "番のデータを入力: ");
x[i] = Integer.parseInt(reader.readLine());
}
// 配列xの値が60以上の要素を出力
for(int i=0; i<x.length; i++)
if(x[i] >= 60)
System.out.println("x[" + i + "]=" + x[i]);
}
プログラムの実行
先週までと同じ手順でプログラムを実行する。
入力に 5(size), 10, 90, 30, 60, 50 と順に与えてやると、以下のように表示される。
配列の長さを入力: 5 第0番のデータを入力: 10 第1番のデータ入力: 90 第2番のデータ入力: 30 第3番のデータ入力: 60 第4番のデータ入力: 50 x[1]=90 x[3]=60
機能テスト
ここまでの作業をCtrl+Sを押して保存し、コンパイルを行う (保存時に自動で行われる)。ここでエラーが発生していたら文法エラーなので見直す。
「DynamicArray に対する機能テスト」 を実行する。
赤いバーが表示された場合、メッセージを元にプログラムを見直すこと。修正を行い、Ctrl+Sで保存した後に「実行」ボタンをクリックする。
| メッセージ | 詳細 |
|---|---|
| 期待された結果と異なります | 出力された結果が期待された値と異なる。 |
機能テストの項目
| 項目名 | テストの内容 |
|---|---|
| testRun | 入力に 5, 10, 90, 30, 60, 50 を与えてプログラムを実行 |