第08週目課題

課題0801

コンソールから実数で摂氏の温度を入力させ、その対応する華氏の温度を表示するプログラム Celsius2Fahrenheit.java をパッケージ j1.lesson08 に作成しなさい。

ただし、「実数で摂氏の温度を引数とし、その対応する華氏の温度を計算する」メソッドとして、名前が cels2fahr で、引数として1つの実数をもつメソッドを定義し、メソッド内部で引数を元に変換計算をして実数の戻り値を返すこと。

摂氏を c とすると華氏への変換式は (9.0 / 5.0) * c + 32.0 で表される。

全体なプログラムの流れは以下のようにすること。

まず、mainメソッドで次のように表示しながらコンソールへの入力要求を行う。

摂氏を入力:

摂氏の温度は実数を指定できること。

cels2fahr(double)メソッド内で摂氏を華氏に変更し、mainメソッドで次のように結果を表示する。

摂氏 c 度は華氏 f 度

ただし、c の部分は入力した摂氏の温度を、f の部分は cels2fahr メソッド内での計算結果を返して出力すること(cels2fahr メソッド内での出力は無効)。

結果の例

仮に、摂氏の温度に36.5を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

摂氏を入力:36.5
摂氏36.5度は華氏97.7度

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson08 にクラス Celsius2Fahrenheit を作成 (ファイル名は Celsius2Fahrenheit.javaとなる)
  2. クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. クラス内に必要なメソッド (cels2fahr) の骨格を作成 (こちらには throws IOException は必要ない)
  4. テスト項目「Celsius2Fahrenheit に対する骨格テスト」をパス
  5. main以外のメソッド内に課題の内容を実装
  6. mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
  7. テスト項目「Celsius2Fahrenheit に対する単体テスト」をパス
  8. mainメソッド内に課題の内容を実装
  9. いくつかテストを行って、プログラムが正しく動作しているか確認
  10. テスト項目「Celsius2Fahrenheit に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
(メソッド名), 期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照

単体テストの項目

項目名 詳細
testCels2Fahr_c0 cels2fahr メソッドを実引数 (0.0) で起動した
testCels2Fahr_f0 cels2fahr メソッドを実引数 (-17.777777777777777777) で起動した
testCels2Fahr_c5 cels2fahr メソッドを実引数 (5.0) で起動した
testCels2Fahr_c10 cels2fahr メソッドを実引数 (10.0) で起動した
testCels2Fahr_c15 cels2fahr メソッドを実引数 (15.0) で起動した
testCels2Fahr_c20 cels2fahr メソッドを実引数 (20.0) で起動した
testCels2Fahr_c25 cels2fahr メソッドを実引数 (25.0) で起動した
testCels2Fahr_c30 cels2fahr メソッドを実引数 (30.0) で起動した

機能テスト

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

機能テストの項目

項目名 詳細
testc0 入力が 0
testc10 入力が 10
testc20 入力が 20
testc30 入力が 30

課題0802

コンソールからxy座標の点を2点入力させ、その2点間の距離を求めるプログラム Distance.java をパッケージ j1.lesson08 に作成しなさい。

ただし、「xy座標の点を2点入力させ、その2点間の距離を求める」メソッドとして、名前が distance で、引数として4つの実数をもつメソッドを定義し、メソッド内部で引数を元に距離を計算して実数の戻り値を返すこと。引数の順番は、(始点x, 始点y, 終点x, 終点y) の順とする。

始点の x の入力を促すコンソールへの入力要求は次のように表示する。

始点のxを入力:

始点の y の入力を促すコンソールへの入力要求は次のように表示する。

始点のyを入力:

終点の x の入力を促すコンソールへの入力要求は次のように表示する。

終点のxを入力:

終点の y の入力を促すコンソールへの入力要求は次のように表示する。

終点のyを入力:

結果の表示方法は次の通りとする。

距離は x

ただし、x の部分は distance メソッド内での計算結果を返して出力すること

結果の例

入力に始点座標(-5.0,3.0)、終点(2.5,-4.0)を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

始点のxを入力:-5.0
始点のyを入力:3.0
終点のxを入力:2.5
終点のyを入力:-4.0
距離は10.259142264341596

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson08 にクラス Distance を作成 (ファイル名は Distance.javaとなる)
  2. クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. クラス内に必要なメソッド (distance(double,double,double,double)) の骨格を作成 (こちらには throws IOException は必要ない)
  4. テスト項目「Distance に対する骨格テスト」をパス
  5. main以外のメソッド内に課題の内容を実装
  6. mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
  7. テスト項目「Distance に対する単体テスト」をパス
  8. mainメソッド内に課題の内容を実装
  9. いくつかテストを行って、プログラムが正しく動作しているか確認
  10. テスト項目「Distance に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
(メソッド名), 期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照

単体テストの項目

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

項目名 詳細
testDistance_0 distance メソッドを 実引数 (0.0, 0.0, 0.0, 0.0) で起動した
testDistance_1a distance メソッドを 実引数 (1.0, 0.0, 0.0, 0.0) で起動した
testDistance_1b distance メソッドを 実引数 (0.0, 1.0, 0.0, 0.0) で起動した
testDistance_1c distance メソッドを 実引数 (0.0, 0.0, 1.0, 0.0) で起動した
testDistance_1d distance メソッドを 実引数 (0.0, 0.0, 0.0, 1.0) で起動した
testDistance_2a distance メソッドを 実引数 (1.0, 1.0, 0.0, 0.0) で起動した
testDistance_2b distance メソッドを 実引数 (0.0, 1.0, 1.0, 0.0) で起動した
testDistance_2c distance メソッドを 実引数 (0.0, 0.0, 1.0, 1.0) で起動した
testDistance_2d distance メソッドを 実引数 (1.0, 0.0, 0.0, 1.0) で起動した
testDistance_5 distance メソッドを 実引数 (-1.0, -1.0, 2.0, 3.0) で起動した
testDistance_sample distance メソッドを 実引数 (-5.0, 3.0, 2.5, -4.0) で起動した

機能テスト

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

機能テストの項目

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

項目名 詳細
test0 入力が順に "0.0", "0.0", "0.0", "0.0"
testsample 入力が順に "-5.0", "3.0", "2.5", "-4.0"

課題0803 (optional)

コンソールから時刻(時、分、秒)と、その時刻からの経過時間(時、分、秒)を入力させ、経過後の時刻を計算し表示するプログラム TimeAdd.java をパッケージ j1.lesson08 に作成しなさい。
不正な時刻が入力された場合は考慮しなくて良い。

ただし、「コンソールから時刻(時、分、秒)と、その時刻からの経過時間(時、分、秒)を入力させ、経過後の時刻を計算」は、名前が timeToSec で、引数として3つの整数をもつメソッドを定義し、メソッド内部で引数を元に、与えられた時刻を0時0分0秒からの経過秒数に変換して戻り値として返す。引数の順番は(時, 分, 秒)とする。

そして、名前が printTime で、戻り値型が void で、引数として1つの整数をもち、0時0分0秒からの経過秒数を h時m分s秒 という形式の文字列に変換して表示するメソッドを定義せよ。(与えられた秒数によっては、hが 24 以上になる場合もある)

それぞれのメソッドの実引数として負の値が入力された場合は考慮しない。

2つのメソッドは共にmainメソッドの中から呼び出されることとする。

時の入力を促すコンソールへの入力要求は次のように表示する。

時を入力:

分の入力を促すコンソールへの入力要求は次のように表示する。

分を入力:

秒の入力を促すコンソールへの入力要求は次のように表示する。

秒を入力:

足される時の入力を促すコンソールへの入力要求は次のように表示する。

加算する時を入力:

足される分の入力を促すコンソールへの入力要求は次のように表示する。

加算する分を入力:

足される秒の入力を促すコンソールへの入力要求は次のように表示する。

加算する秒を入力:

結果の例

入力に13時30分10秒と5時40分15秒を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

時を入力:13
分を入力:30
秒を入力:10
加算する時を入力:5
加算する分を入力:40
加算する秒を入力:15
19時10分25秒

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson08 にクラス TimeAdd を作成 (ファイル名は TimeAdd.javaとなる)
  2. クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. クラス TimeAdd 内に必要なメソッド (timeToSec(int,int,int), printTime(int)) の骨格を作成 (こちらには throws IOException は必要ない)
  4. テスト項目「TimeAdd に対する骨格テスト」をパス
  5. main以外のメソッド内に課題の内容を実装
  6. mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
  7. テスト項目「TimeAdd に対する単体テスト」をパス
  8. mainメソッド内に課題の内容を実装
  9. いくつかテストを行って、プログラムが正しく動作しているか確認
  10. テスト項目「TimeAdd に対する機能テスト」をパス

ヒント

時間の足し算は、秒や分の桁上がりを考えるのが非常に面倒である。時間を秒単位で表してから足し算を行い、秒を時間に変換してやることで簡単に行える。

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
(メソッド名), 期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照

単体テストの項目

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

項目名 詳細
testTimeToSec_0_0_0 timeToSec メソッドを 実引数 (0, 0, 0) で起動した
testTimeToSec_0_0_1 timeToSec メソッドを 実引数 (0, 0, 1) で起動した
testTimeToSec_0_1_0 timeToSec メソッドを 実引数 (0, 1, 0) で起動した
testTimeToSec_1_0_0 timeToSec メソッドを 実引数 (1, 0, 0) で起動した
testTimeToSec_1_2_3 timeToSec メソッドを 実引数 (1, 2, 3) で起動した
testPrintTime_1s printTime メソッドを 実引数 (1) で起動した
testPrintTime_30s printTime メソッドを 実引数 (30) で起動した
testPrintTime_59s printTime メソッドを 実引数 (59) で起動した
testPrintTime_1m printTime メソッドを 実引数 (60) で起動した
testPrintTime_30m printTime メソッドを 実引数 (1800) で起動した
testPrintTime_59m59s printTime メソッドを 実引数 (3599) で起動した
testPrintTime_1h printTime メソッドを 実引数 (3600) で起動した
testPrintTime_12h printTime メソッドを 実引数 (43200) で起動した
testPrintTime_23h59m59s printTime メソッドを 実引数 (86399) で起動した
testPrintTime_24h printTime メソッドを 実引数 (86400) で起動した

機能テスト

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

機能テストの項目

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

項目名 詳細
test0h0m0s_0h0m0s 入力が全て "0"
test1h2m3s_4h5m6s 入力が順に "1", "2", "3", "4", "5", "6"
test0h59m59s_0h0m1s 入力が順に "0", "59", "59", "0", "0", "1"
test22h15m30s_1h44m30s 入力が順に "22", "15", "30", "1", "44", "30"

課題0804 (optional)

コンソールから 2 以上の整数を入力させ、その素因数を小さい順に全て列挙するプログラム PrimeFactors.java をパッケージ j1.lesson08 に作成しなさい。

ただし、名前が minimumPrimeFactorOf で、引数として1つの整数をもち、与えられた引数 n に対して、その 1 を除く最小の約数を整数で返すメソッドを定義せよ。また、n が 1 以下の場合は考慮しなくてよい。

2以上の整数の入力を促すコンソールへの入力要求は次のように表示する。

2以上の整数を入力:

2未満の整数が入力されたら、以下のように表示して終了する。

2以上の整数を入力してください

結果の例

入力に924を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

2以上の整数を入力:924
2 2 3 7 11 

手順

指定した箇所で必ずテストを行うこと。

  1. パッケージ j1.lesson08 にクラス PrimeFactors を作成 (ファイル名は PrimeFactors.javaとなる)
  2. クラス PrimeFactors 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. クラス内に必要なメソッド (minimumPrimeFactorOf) の骨格を作成 (こちらには throws IOException は必要ない)
  4. テスト項目「PrimeFactors に対する骨格テスト」をパス
  5. main以外のメソッド内に課題の内容を実装
  6. mainから各メソッドを呼び出して、メソッドが正しく動作しているか確認
  7. テスト項目「PrimeFactors に対する単体テスト」をパス
  8. mainメソッド内に課題の内容を実装
  9. いくつかテストを行って、プログラムが正しく動作しているか確認
  10. テスト項目「PrimeFactors に対する機能テスト」をパス

ヒント

素因数がなくなるまで、最も小さい素因数を取り出す操作を繰り返す

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
(メソッド名), 期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照

単体テストの項目

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

項目名 詳細
testMinimumPrimeFactorOf_2 minimumFactorOf メソッドを 実引数 (2) で起動した
testMinimumPrimeFactorOf_3 minimumFactorOf メソッドを 実引数 (3) で起動した
testMinimumPrimeFactorOf_4 minimumFactorOf メソッドを 実引数 (4) で起動した
testMinimumPrimeFactorOf_5 minimumFactorOf メソッドを 実引数 (5) で起動した
testMinimumPrimeFactorOf_6 minimumFactorOf メソッドを 実引数 (6) で起動した
testMinimumPrimeFactorOf_7 minimumFactorOf メソッドを 実引数 (7) で起動した
testMinimumPrimeFactorOf_8 minimumFactorOf メソッドを 実引数 (8) で起動した
testMinimumPrimeFactorOf_9 minimumFactorOf メソッドを 実引数 (9) で起動した
testMinimumPrimeFactorOf_221 minimumFactorOf メソッドを 実引数 (221) で起動した
testMinimumPrimeFactorOf_257 minimumFactorOf メソッドを 実引数 (257) で起動した
testMinimumPrimeFactorOf_16777219 minimumFactorOf メソッドを 実引数 (16777219) で起動した

機能テスト

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

機能テストの項目

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

項目名 詳細
testM5 入力が -5
test0 入力が 0
test1 入力が 1
test2 入力が 2
test3 入力が 3
test4 入力が 4
test360 入力が 360
test16777216 入力が 16777216
test16777217 入力が 16777217