第14週目課題

課題1401

直方体を表すクラス Cuboid をパッケージ j2.lesson01 に作成しなさい。

直方体とはすべての面が長方形あるような六面体のことである。

この Cuboid クラスには以下の2つのインスタンスフィールドを作成すること。

このクラスにはメソッドをひとつも用意しなくてよい。

手順

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

  1. 各メソッドに対する詳細な擬似コードを作成する
  2. パッケージ j2.lesson01 にクラス Cuboid を作成
  3. 指定したインスタンスフィールドを作成する
  4. テスト項目「Cuboidに対する骨格テスト」をパス

テストの失敗メッセージ

骨格テスト

メッセージ 詳細
(クラス名), existence パッケージ内に課題で指定したクラスが存在していない。パッケージやクラス名を確認
(フィールド名), existence 指定されたフィールドが存在しない
(フィールド名), not static フィールドを作る際に static が余計についている
(フィールド名), type <T> フィールドを作る際に型の指定を間違っている。正しくは <T>

課題1402

課題1401で作成した Cuboid クラスのインスタンスの表面積および体積を計算するプログラム CuboidAction をパッケージ j2.lesson01 に作成しなさい。

表面積とは立体の表面の面積を総和したものである。

mainメソッドの動作を表す擬似コードは以下の通りである。出力する文字列などは以下の擬似コードに従うこと。

プログラム全体
    cuboid = 新しい直方体インスタンス
    直方体の底面に新しい長方形インスタンスを代入
    print "底面の高さを入力:"
    入力された底面の高さを代入
    print "底面の幅を入力:"
    入力された底面の幅を代入
    print "直方体の高さを入力:"
    入力された直方体の高さを代入
    print "表面積は" + surface-area-of(cuboid) + 改行
    print "体積は" + volume-of(cuboid) + 改行

ただし、擬似コードにある surface-area-of を表すメソッドとして、surfaceAreaOf という名前のメソッドを同クラス内に作成すること。仮引数の型は (Cuboid) とし、戻り値の型は double とする。このメソッドは引数に Cuboid 型の直方体を取り、与えられた直方体に対して、その表面積を計算して返す。

また、擬似コードにある volume-of を表すメソッドとして、volumeOf という名前のメソッドを同クラス内に作成すること。仮引数の型は (Cuboid) とし、戻り値の型は double とする。このメソッドは引数に Cuboid 型の直方体を取り、与えられた直方体に対して、その体積を計算して返す。

結果の例

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

底面の高さを入力:2.0
底面の幅を入力:3.0
直方体の高さを入力:4.0
表面積は52.0
体積は24.0

手順

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

  1. 各メソッドに対する詳細な擬似コードを作成する
  2. パッケージ j2.lesson01 にクラス CuboidAction を作成
  3. クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  4. クラス内に必要なメソッドの骨格を作成 (こちらには throws IOException は必要ない)
  5. テスト項目「CuboidActionに対する骨格テスト」をパス
  6. 擬似コードを各メソッドにコメントとして貼り付ける
  7. 擬似コードに対するプログラムを書く (main メソッド以外)
  8. 各メソッドをテストする (JUnitを用いてもよい)
  9. テスト項目 「CuboidActionに対する単体テスト」 をパス
  10. mainメソッドを実装する
  11. 実際に実行して動作を確認する
  12. テスト項目 「CuboidActionに対する機能テスト」 をパス

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照
未初期化フィールド Cuboid.base に Rectangle インスタンスを代入していない可能性がある

単体テストの項目

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

項目名 詳細
surfaceAreaOf_234 surfaceAreaOf メソッドを底面 2.0, 3.0 の長方形、高さ4.0の直方体で起動
surfaceAreaOf_567 surfaceAreaOf メソッドを底面 5.0, 6.0 の長方形、高さ7.0の直方体で起動
volumeOf_234 volumeOf メソッドを底面 2.0, 3.0 の長方形、高さ4.0の直方体で起動
volumeOf_567 volumeOf メソッドを底面 5.0, 6.0 の長方形、高さ7.0の直方体で起動

機能テストの項目

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

項目名 詳細
sample 結果の例と同じ入力

課題1403 (optional)

人間の理想体重と Body Mass Index を計算するプログラム PersonAction および、人間を表すクラス Person をパッケージ j2.lesson01 に作成しなさい。

人間を表す Person クラスには以下のインスタンスフィールドを作成すること。

PersonActionにはmainメソッドを作成する。mainメソッドの動作を表す擬似コードは以下の通りである。出力する文字列などは以下の擬似コードに従うこと。

プログラム全体
    person = 新しいPersonインスタンス
    print "名前を入力:"
    person の名前 = 入力(String)
    print "身長を入力(cm):"
    person の身長 = 入力 (double) を メートルに変換したもの
    print "体重を入力(kg):"
    person の体重 = 入力 (double)
    print (personの名前) + "さん" 改行
    print "理想体重は" + idel-weight-of(person) + "kg" 改行
    print "BMI指数は" + BMI-of(person) 改行

ただし、擬似コードにある idel-weight-of を表すメソッドとして、idealWeightOf という名前のメソッドを同クラス内に作成すること。仮引数の型は (Person) とし、戻り値の型は double とする。このメソッドは引数に Person 型の情報を取り、与えられた情報に対して、その人の理想体重を計算して返す。

理想体重の計算方法は、次の式によって表すことができる。

また、擬似コードにある BMI-of を表すメソッドとして、bmiOf という名前のメソッドを同クラス内に作成すること。仮引数の型は (Person) とし、戻り値の型は double とする。このメソッドは引数に Person 型の情報を取り、与えられた情報に対して、その人のBMI指数を計算して返す。

BMI指数とは肥満の程度を判定するための数値のことで、次の式によって計算できる。

この値が22に近いほど統計的に病気をしにくいといわれている。

結果の例

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

名前を入力:ほげ
身長を入力(cm):170.0
体重を入力(kg):60.0
ほげさん
理想体重は63.57999999999999kg
BMI指数は20.761245674740486

手順

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

  1. 各メソッドに対する詳細な擬似コードを作成する
  2. パッケージ j2.lesson01 にクラス Person, PersonAction を作成
  3. PersonAction クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  4. クラス内に必要なメソッドの骨格を作成 (こちらには throws IOException は必要ない)
  5. テスト項目「Personに対する骨格テスト」をパス
  6. 擬似コードを各メソッドにコメントとして貼り付ける
  7. 擬似コードに対するプログラムを書く (main メソッド以外)
  8. 各メソッドをテストする (JUnitを用いてもよい)
  9. テスト項目 「Personに対する単体テスト」 をパス
  10. mainメソッドを実装する
  11. 実際に実行して動作を確認する
  12. テスト項目 「Personに対する機能テスト」 をパス

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照
未初期化フィールド インスタンスを代入すべきフィールドにインスタンスを代入していない可能性がある

単体テストの項目

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

項目名 詳細
idealWeightOf_150 idealWeightOf メソッドを身長150cmのPersonで起動
idealWeightOf_160 idealWeightOf メソッドを身長160cmのPersonで起動
idealWeightOf_170 idealWeightOf メソッドを身長170cmのPersonで起動
idealWeightOf_180 idealWeightOf メソッドを身長180cmのPersonで起動
bmiOf_160a bmiOf メソッドを身長160cm, 体重50kgのPersonで起動
bmiOf_160b bmiOf メソッドを身長160cm, 体重60kgのPersonで起動
bmiOf_160c bmiOf メソッドを身長160cm, 体重70kgのPersonで起動
bmiOf_160d bmiOf メソッドを身長160cm, 体重80kgのPersonで起動
bmiOf_180a bmiOf メソッドを身長180cm, 体重50kgのPersonで起動
bmiOf_180b bmiOf メソッドを身長180cm, 体重60kgのPersonで起動
bmiOf_180c bmiOf メソッドを身長180cm, 体重70kgのPersonで起動
bmiOf_180d bmiOf メソッドを身長180cm, 体重80kgのPersonで起動

機能テストの項目

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

項目名 詳細
sample 結果の例と同じ入力

課題1404 (optional)

トランプを扱うプログラム CardAction および、トランプのカード一枚を表すクラス Card をパッケージ j2.lesson01 に作成しなさい。

トランプのカード一枚を表す Card クラスには以下のインスタンスフィールドを作成すること。

suite に入る値は 'S', 'C', 'H', 'D' のいずれかで、順にスペード、クラブ、ハート、ダイヤを表す。rankに入る値は 1 から 13 の値で、順に エース, 2, ... , 9, ジャック, クイーン, キングを表す。

CardActionではトランプのカード1枚を2文字または3文字で表した値を入力させ、それに対応する Card インスタンスを作成し、その Card インスタンスの内容を表示するだけの簡単なプログラムである。

トランプのカード1枚は、次のように2文字または3文字で表すことにする。

CardActionにはmainメソッドを作成する。mainメソッドの動作を表す擬似コードは以下の通りである。出力する文字列などは以下の擬似コードに従うこと。

プログラム全体
    print "カードを入力:"
    card = 入力されたカード
    print "入力されたカードは"
    print(card)

ただし、擬似コードにある print(card) では、渡された Card 型のインスタンスに対して、以下の表にあるような表示を行うこと。

入力された値 出力すべき値
SA スペードのエース
Sn (nは2~10の数字) スペードのn
SJ スペードのジャック
SQ スペードのクイーン
SK スペードのキング
CA クラブのエース
Cn (nは2~10の数字) クラブのn
CJ クラブのジャック
CQ クラブのクイーン
CK クラブのキング
HA ハートのエース
Hn (nは2~10の数字) ハートのn
HJ ハートのジャック
HQ ハートのクイーン
HK ハートのキング
DA ダイヤのエース
Dn (nは2~10の数字) ダイヤのn
DJ ダイヤのジャック
DQ ダイヤのクイーン
DK ダイヤのキング

特に実装方法は問わない。出力形式を擬似コードに合わせていれば好きなように設計して構わない。ただし、Cardクラスは指定されたものを必ず用意すること。

結果の例

いくつか例を示す。

カードを入力:SA
入力されたカードはスペードのエース
カードを入力:C5
入力されたカードはクラブの5
カードを入力:HJ
入力されたカードはハートのジャック
カードを入力:DQ
入力されたカードはダイヤのクイーン
カードを入力:SK
入力されたカードはスペードのキング

手順

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

  1. 各メソッドに対する詳細な擬似コードを作成する
  2. パッケージ j2.lesson01 にクラス Card, CardAction を作成
  3. CardAction クラス内に throws IOException の指定をした mainメソッド (public static void main(String[] args) throws IOException { }) を作成
  4. クラス内に必要なメソッドの骨格を作成 (こちらには throws IOException は必要ない)
  5. テスト項目「Cardに対する骨格テスト」をパス
  6. 擬似コードを各メソッドにコメントとして貼り付ける
  7. 擬似コードに対するプログラムを書く (main メソッド以外)
  8. 各メソッドをテストする (JUnitを用いてもよい)
  9. mainメソッドを実装する
  10. 実際に実行して動作を確認する
  11. テスト項目 「Cardに対する機能テスト」 をパス

テストの失敗メッセージ

骨格テスト

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

機能テストの項目

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

項目名 詳細
SA 入力に "SA"
S2 入力に "S2"
S5 入力に "S5"
S9 入力に "S9"
SJ 入力に "SJ"
SQ 入力に "SQ"
SK 入力に "SK"
CA 入力に "CA"
C2 入力に "C2"
C5 入力に "C5"
C9 入力に "C9"
CJ 入力に "CJ"
CQ 入力に "CQ"
CK 入力に "CK"
HA 入力に "HA"
H2 入力に "H2"
H5 入力に "H5"
H9 入力に "H9"
HJ 入力に "HJ"
HQ 入力に "HQ"
HK 入力に "HK"
DA 入力に "DA"
D2 入力に "D2"
D5 入力に "D5"
D9 入力に "D9"
DJ 入力に "DJ"
DQ 入力に "DQ"
DK 入力に "DK"