第06週目課題

課題0601

コンソールに0以上の整数を入力させ、その数の序数表現の略語 (0th, 1st, 2nd, 3rd, 4th,..) を表示するプログラム ToOrdinal.java をパッケージ j1.lesson06 に作成しなさい。

ただし、11th, 12th, 13th で終わる略語は 11th, 12th, 13th と表示しても、11st, 12nd, 13rd と表示してもどちらでも良いものとする (そのようなテストは行わない)。

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

0以上の整数を入力:

ここで入力された整数の下1桁の値によって、次のように表示する。

入力された値の下1桁 表示する内容
1 入力された値の末尾に st を加えた文字列
2 入力された値の末尾に nd を加えた文字列
3 入力された値の末尾に rd を加えた文字列
それ以外 入力された値の末尾に th を加えた文字列

ただし、入力された値が0未満の場合は次のように表示する。

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

結果の例

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

0以上の整数を入力:123
123rd

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

0以上の整数を入力:-1
0以上の数を入力してください

手順

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

  1. パッケージ j1.lesson06 にクラス ToOrdinal を作成 (ファイル名は ToOrdinal.javaとなる)
  2. クラス ToOrdinal 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「ToOrdinal に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. プログラムを直接実行し、いくつか自分で考えたテストケースを通してみる
  6. テスト項目「ToOrdinal に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson06 に ToOrdinal クラスが存在していない。パッケージやクラス名を確認
クラスが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の指定を行っていない。

機能テスト

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

テスト項目一覧

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

テスト項目名 テスト内容
testM5 入力が-5
testM1 入力が-1
test0 入力が0
test1 入力が1
test2 入力が2
test3 入力が3
test4 入力が4
test7 入力が7
test10 入力が10
test21 入力が21
test432 入力が432
test6543 入力が6543
test87654 入力が87654

課題0602

一般的な日本銀行券の額面 (1000,5000,10000の3種類) を整数で繰り返し入力させ、0 が入力された際に繰り返しを終了し、そこまでに入力された額面の合計とそれぞれの枚数を表示するプログラム MoneyBox.java をパッケージ j1.lesson06 に作成しなさい。

日本銀行券の額面を入力させる、コンソールへの入力要求は次のように表示する。この入力要求は入力のたびに表示させる。

額面を入力:

0が入力されたら繰り返しを終了し、最後に以下のように結果を表示させる。

 1000円札の数:a
 5000円札の数:b
10000円札の数:c
合計はx円

ただし、aの部分にはそこまでに入力された1000の回数、bの部分にはそこまでに入力された5000の回数、cの部分にはそこまでに入力された10000の回数、xの部分にはそこまでに入力された1000,5000,10000それぞれの回数に、それぞれの額面をかけたものの合計を出力すること。つまり、1000,5000,10000以外の値が入力されても合計には反映されない。

入力された値が、1000, 5000, 10000, 0 のいずれでもない場合、以下のように表示したのちに続けて繰り返しを実行する。

お札ではありません

結果の例

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

額面を入力:1000
額面を入力:3000
お札ではありません
額面を入力:5000
額面を入力:10000
額面を入力:1000
額面を入力:0
 1000円札の数:2
 5000円札の数:1
10000円札の数:1
合計は17000円

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

額面を入力:0
 1000円札の数:0
 5000円札の数:0
10000円札の数:0
合計は0円

手順

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

  1. パッケージ j1.lesson06 にクラス MoneyBox を作成 (ファイル名は MoneyBox.javaとなる)
  2. クラス MoneyBox 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「MoneyBox に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. プログラムを直接実行し、いくつか自分で考えたテストケースを通してみる
  6. テスト項目「MoneyBox に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson06 に MoneyBox クラスが存在していない。パッケージやクラス名を確認
クラスが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の指定を行っていない。

機能テスト

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

テスト項目一覧

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

テスト項目名 テスト内容
testVoid 入力が順に0
test1000 入力が順に1000, 0
test5000 入力が順に5000, 0
test10000 入力が順に10000, 0
testAll 入力が順に1000, 5000, 10000, 0
testLong 入力が順に1000, 5000, 10000, 1000, 5000, 1000, 0
test1 入力が順に1, 0
test999 入力が順に999, 0
test1001 入力が順に1001, 0
test4999 入力が順に4999, 0
test5001 入力が順に5001, 0
test9999 入力が順に9999, 0
test10001 入力が順に10001, 0
testLongError 入力が順に500, 3000, 4000, 0

課題0603 (optional)

コンソールから0以上100以下の整数を繰り返し入力させ、その範囲外の値が入力された際に繰り返しを終了し、そこまでに入力された0以上100以下の値の中で最大のものと最小のものを表示する MaxMin.java をパッケージ j1.lesson06 に作成しなさい。

0以上100以下の整数を入力させる、コンソールへの入力要求は次のように表示する。この入力要求は入力のたびに表示させる。

値を入力してください:

0以上100以下の値以外が入力されたら繰り返しを終了し、最後に以下のように結果を表示させる。

最大はx
最小はn

ただし、xの部分にはそこまでに入力された0以上100以下の値で最大のものを出力し、nの部分にはそこまでに入力された0以上100以下の値で最小のものを出力すること。

このとき、0以上100以下の整数が一度も入力されなかった場合は以下のように出力する。

入力はありません

結果の例

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

値を入力してください:85
値を入力してください:100
値を入力してください:76
値を入力してください:-1
最大は100
最小は76

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

値を入力してください:-1
入力はありません

手順

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

  1. パッケージ j1.lesson06 にクラス MaxMin を作成 (ファイル名は MaxMin.java となる)
  2. クラス Zeller 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「MaxMin に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. プログラムを直接実行し、いくつか自分で考えたテストケースを通してみる
  6. テスト項目「MaxMin に対する機能テスト」をパス

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson06 に MaxMin クラスが存在していない。パッケージやクラス名を確認
クラスが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の指定を行っていない。

機能テスト

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

テスト項目一覧

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

テスト項目名 テスト内容
testLower 入力が順に0, -1
testUpper 入力が100, -1
testLowerOver 入力が -1
testUpperOver 入力が 101
testSenarioShort 入力が順に 1, 6, 2, -1
testSenarioLong 入力が順に 10, 21, 32, 43, 54, -1
testSenarioLong2 入力が順に 54, 43, 32, 21, 10, -1

課題0604 (optional)

コンソールから年、月、日をそれぞれ入力させ、その日付が何曜日であるかを表示するプログラム Zeller.java をパッケージ j1.lesson06 に作成しなさい。

ただし、入力される年月日は1582年10月15日から2999年12月31日までとし、2999年12月31日までグレゴリウス暦が使用されるという前提でよい。また、実際に存在しない日付が指定された場合は考慮しなくても良い (そのようなテストは行わない)。

コンソールへの入力要求 (年) は次のように表示する。

年を入力:

コンソールへの入力要求 (月) は次のように表示する。

月を入力:

コンソールへの入力要求 (日) は次のように表示する。

日を入力:

必ず、年、月、日の順に入力を要求すること。

入力された年月日からその曜日を算出し、以下のように表示する。

y年m月d日はw曜日

ただし、y,m,d,wは次のように出力すること。

記号 出力する文字
y 入力された年 2005
m 入力された月 5
d 入力された日 23
w 入力された曜日(日月火水木金土のいずれか)

結果の例

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

年を入力:2005
月を入力:5
日を入力:23
2005年5月23日は月曜日

手順

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

  1. パッケージ j1.lesson06 にクラス Zeller を作成 (ファイル名は Zeller.java となる)
  2. クラス Zeller 内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  3. テスト項目「Zeller に対する骨格テスト」をパス
  4. mainメソッド内に課題の内容を実装
  5. プログラムを直接実行し、いくつか自分で考えたテストケースを通してみる
  6. テスト項目「Zeller に対する機能テスト」をパス

ヒント

曜日の算出はツェラーの公式を用いると簡単である。

このアルゴリズムの基本的な考え方は、「1月,2月を前年の13月,14月として扱い、3月を1年の初めとする」というものである。これによって、閏年の処理を簡単にしている。

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
クラスが存在しません j1.lesson06 に Zeller クラスが存在していない。パッケージやクラス名を確認
クラスが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の指定を行っていない。

機能テスト

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

テスト項目一覧

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

テスト項目名 テスト内容
test15821015 入力が順に 1582, 10, 15
test29991231 入力が順に 2999, 12, 31
test20050523 入力が順に 2005, 5, 23
test20050524 入力が順に 2005, 5, 24
test20050525 入力が順に 2005, 5, 25
test20050526 入力が順に 2005, 5, 26
test20050527 入力が順に 2005, 5, 27
test20050528 入力が順に 2005, 5, 28
test20050529 入力が順に 2005, 5, 29
test19960301 入力が順に 1996, 3, 1
test20000301 入力が順に 2000, 3, 1
test20040301 入力が順に 2004, 3, 1
test21000301 入力が順に 2100, 3, 1