第11週目課題

課題1101

コンソールからテストの得点を整数で次々と入力し、10点区切りの得点分布表を表示するプログラム Distribution.java をパッケージ j1.lesson11 に作成しなさい。

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

プログラム全体
    print "受験者数を入力:"
    count = コンソール入力 (整数)
    if count が負の値
        print "受験者数には0以上の値を入力してください"
        プログラムの終了
    score-list = 長さ count の新しい配列 (int[])
    for i を 0 から count - 1 まで
        print "点数を入力:"
        score-list[i] = コンソール入力(整数)
    distribution = create-distribution(score-list)
    print-distribution(distribution)

ただし、擬似コードにある create-distribution を表すメソッドとして、createDistribution という名前のメソッドを作成すること。仮引数の型は (int[]) とし、戻り値の型は int[] とする。このメソッドは引数に int[] 型の得点リストを取り、与えられた得点の表に対して、10点区切りの得点分布表を作成し返す。この得点分布表は int[] 型の 11 要素を持つ配列で、以下の表のように各要素に指定した範囲の得点を持つ人数を数えて格納しておくこと。得点は0から100が有効で、それ以外の点数が入力された場合は、その値を返す配列の内容に反映させない。また、引数に与えられた得点リストを変更しないこと。

インデックス 内容
[0] 0 点以上 9 点以下の人数を格納
[1] 10 点以上 19 点以下の人数を格納
[2] 20 点以上 29 点以下の人数を格納
[3] 30 点以上 39 点以下の人数を格納
[4] 40 点以上 49 点以下の人数を格納
[5] 50 点以上 59 点以下の人数を格納
[6] 60 点以上 69 点以下の人数を格納
[7] 70 点以上 79 点以下の人数を格納
[8] 80 点以上 89 点以下の人数を格納
[9] 90 点以上 99 点以下の人数を格納
[10] 100 点の人数を格納

また、擬似コードにある print-distribution では、与えられた得点分布表に対して次のような擬似コードで表されるように出力を行うこと。

print-distribution(distribution)
    for i を 0 から 9 まで
        score-start = 10 * i
        score-end = score-start + 9
        print score-start "-" score-end ":" distribution[i], 改行
    print "100:" distribution[10], 改行

「プログラム全体」を表す擬似コード内で、score-listの各要素にコンソールからの入力を代入する際に値をチェックしていないが、これについては create-distribution が表す擬似コード内で処理する (createDistribution の仕様に従うこと)。

結果の例

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

受験者数を入力:5
点数を入力:100
点数を入力:0
点数を入力:999
点数を入力:12
点数を入力:35
0-9:1
10-19:1
20-29:0
30-39:1
40-49:0
50-59:0
60-69:0
70-79:0
80-89:0
90-99:0
100:1

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

受験者数を入力:-1
受験者数には0以上の値を入力してください

ヒント

ある得点 score に対して、score が 0 以上 100 未満であった場合、score / 10 を計算すると得点分布表内のインデックスが簡単に求まる。

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照
範囲外のインデックスにアクセスしました 配列を操作する際に、0未満または配列長以上の値をインデックスとしている。直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す
無限ループの可能性 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認

単体テストの項目

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

項目名 詳細
CreateDistribution_empty createDistribution メソッドを実引数 ({}) で起動
CreateDistribution_fire_<n>_bottom createDistribution メソッドを実引数 ({<n> * 10 + 0}) で起動
CreateDistribution_fire_<n>_middle createDistribution メソッドを実引数 ({<n> * 10 + 4}) で起動
CreateDistribution_fire_<n>_top createDistribution メソッドを実引数 ({<n> * 10 + 9}) で起動
CreateDistribution_fire_10 createDistribution メソッドを実引数 ({100}) で起動
CreateDistribution_skip_low_top createDistribution メソッドを実引数 ({-1}) で起動
CreateDistribution_skip_low_middle createDistribution メソッドを実引数 ({-5}) で起動
CreateDistribution_skip_high_bottom createDistribution メソッドを実引数 ({101}) で起動
CreateDistribution_skip_high_middle createDistribution メソッドを実引数 ({105}) で起動
CreateDistribution_long createDistribution メソッドで返ってくる値を{2,3,4,5,6,7,8,9,10,11,12}になるように調整して起動

機能テスト

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

機能テストの項目

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

項目名 詳細
M5 入力に -5
M1 入力に -1
0 入力に 0
1 入力に 1, 0
5 入力に 5, 0, 10, 20, 30, 40

課題1102

コンソールから整数を次々と入力させ、その中から特定の整数を探すプログラム LinearSearch.java をパッケージ j1.lesson11 に作成しなさい。

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

プログラム全体
    print "要素数を入力:"
    count = コンソール入力 (整数)
    if count が負の値
        print "要素数には0以上の値を指定してください"
        プログラムの終了
    values = 要素数が count の新しい配列 (int[])
    for i を 0 から values の長さ - 1 まで
        print "要素を入力:"
        values[i] = コンソール入力 (整数)
    print "探す要素を入力:"
    target = コンソール入力 (整数)
    index = search(values, target)
    if index が -1
        print "見つかりませんでした"
    else
        print "index番目に入力されました"

ただし、擬似コードにある search を表すメソッドとして、search という名前のメソッドを作成すること。仮引数の型は (int[], int) とし、戻り値の型は int とする。このメソッドは引数に int[] 型の入力された値のリストと、int 型の探す値をとり、探す値が入力された値のリスト内で最初 (最もインデックスが若いもの) に検出された位置のインデックスを返し、見つからないない場合は -1 を返す。また、引数に与えられた配列を変更しないこと。

結果の例

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

要素数を入力:4
要素を入力:1
要素を入力:2
要素を入力:3
要素を入力:4
探す要素を入力:2
1番目に入力されました

上記のように、配列の[1] に入っていれば 1 を返すようにする。

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

要素数を入力:4
要素を入力:1
要素を入力:2
要素を入力:3
要素を入力:4
探す要素を入力:0
見つかりませんでした

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照
範囲外のインデックスにアクセスしました 配列を操作する際に、0未満または配列長以上の値をインデックスとしている。直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す
無限ループの可能性 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認

単体テストの項目

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

項目名 詳細
Search_empty search メソッドを実引数 ({}, 0) で起動
Search_1_hit_<n> search メソッドを実引数 ({<n>}, <n>) で起動
Search_1_miss_<n> search メソッドを実引数 ({<n>}, <n>以外の値) で起動
Search_5_<n> search メソッドを実引数 ({1,2,3,4,5}, <n>) で起動
Search_first_<n> search メソッドを実引数 ({1,2,3,4,5,5,4,3,2,1}, <n>) で起動

機能テスト

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

機能テストの項目

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

項目名 詳細
M5 入力が -5
M1 入力が -1
0 入力が 0, 0
Sample1 入力が 4, 1, 2, 3, 4, 2
Sample2 入力が 4, 1, 2, 3, 4, 0

課題1103 (optional)

5個の商品の個数をそれぞれ入力し、それぞれの商品の金額と合計金額を表示するプログラム Receipt.java をパッケージ j1.lesson11 に作成しなさい。

商品の単価は、それぞれ以下のようになっているとする。

商品番号 単価
0 100
1 150
2 80
3 90
4 250

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

プログラム全体
    unit-costs = {100, 150, 80, 90, 250}
    quantities = 長さ unit-costs を持つ新しい配列 (int[])
    全ての quantities の要素について、item-number を 0 から順番に
        print "商品番号" item-number "の個数を入力:"
        quantities[item-number] = コンソール入力 (整数)
        のようにしてquantitiesのすべての個数を入力する
        ただし、入力された値が負の値ならば、
            print "個数は0個以上でなくてはなりません", 改行
            をして、正の値が入力されるまで同じ要素について繰り返す
    totals = calculate-amounts(unit-costs, quantities)
    for i を 0 から unit-costs の長さ - まで
        print "番号 " i ", "
        print "単価 " unit-costs[i] ", "
        print "個数 " quantities[i] ", " 
        print "金額 " totals[i]
        print 改行
    print "合計 " totalsの最後の要素 
    print 改行

ただし、擬似コードにある calculate-amounts を表すメソッドとして、calculateAmounts という名前のメソッドを作成すること。仮引数の型は (int[], int[]) とし、戻り値の型は int[] とする。このメソッドは最初の引数に int[] 型の入力された単価のリストと、二つ目の引数に int[] 型の個数のリストを取り、各商品の金額と合計金額を格納した int[] 型の値を返す。また、引数に与えられた配列を変更しないこと。

返される配列は次のような形式である。

calculateAmounts メソッドに与えられる配列の要素数が 5 以外(0, 1, 10 など)であっても対処できるようにメソッドを作成すること。要素数が 0 であった場合、合計は 0 となる。

結果の例

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

商品番号0の個数を入力:10
商品番号1の個数を入力:20
商品番号2の個数を入力:30
商品番号3の個数を入力:40
商品番号4の個数を入力:50
番号0, 単価 100, 個数 10, 金額 1000
番号1, 単価 150, 個数 20, 金額 3000
番号2, 単価 80, 個数 30, 金額 2400
番号3, 単価 90, 個数 40, 金額 3600
番号4, 単価 250, 個数 50, 金額 12500
合計 22500

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

商品番号0の個数を入力:-1
個数は0個以上でなくてはなりません
商品番号0の個数を入力:0
商品番号1の個数を入力:0
商品番号2の個数を入力:0
商品番号3の個数を入力:0
商品番号4の個数を入力:0
番号0, 単価 100, 個数 0, 金額 0
番号1, 単価 150, 個数 0, 金額 0
番号2, 単価 80, 個数 0, 金額 0
番号3, 単価 90, 個数 0, 金額 0
番号4, 単価 250, 個数 0, 金額 0
合計 0

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

商品番号0の個数を入力:10
商品番号1の個数を入力:20
商品番号2の個数を入力:30
商品番号3の個数を入力:40
商品番号4の個数を入力:-1
個数は0個以上でなくてはなりません
商品番号4の個数を入力:50
番号0, 単価 100, 個数 10, 金額 1000
番号1, 単価 150, 個数 20, 金額 3000
番号2, 単価 80, 個数 30, 金額 2400
番号3, 単価 90, 個数 40, 金額 3600
番号4, 単価 250, 個数 50, 金額 12500
合計 22500

ヒント

「全体のプログラム」では、商品の個数の入力の回数が決まらないので、for 文より while 文の方が書きやすい。

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照
範囲外のインデックスにアクセスしました 配列を操作する際に、0未満または配列長以上の値をインデックスとしている。直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す
無限ループの可能性 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認

単体テストの項目

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

項目名 詳細
CalculateAmounts_empty calculateAmounts メソッドを実引数 ({},{}) で呼び出した
CalculateAmounts_1 calculateAmounts メソッドを実引数 ({2},{3}) で呼び出した
CalculateAmounts_5 calculateAmounts メソッドを実引数 ({2,3,5,7,11},{13,17,23,27,31}) で呼び出した
CalculateAmounts_10 calculateAmounts メソッドを実引数 ({2,3,5,7,11,13,17,23,27,31}, {2,3,5,7,11,13,17,23,27,31}) で呼び出した

機能テスト

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

機能テストの項目

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

項目名 詳細
M5 入力が -5, 0, -5, 0, -5, 0, -5, 0, -5, 0
M1 入力が -1, 0, -1, 0, -1, 0, -1, 0, -1, 0
M1_first 入力が -1, -1, -1, -1, -1, 0, 0, 0, 0, 0
M1_middle 入力が 0, 0, -1, -1, -1, -1, -1, 0, 0, 0
M1_last 入力が 0, 0, 0, 0, -1, -1, -1, -1, -1, 0
05 入力が 0, 0, 0, 0, 0
15 入力が 1, 1, 1, 1, 1
1to5 入力が 1, 2, 3, 4, 5
Sample 入力が 10, 20, 30, 40, 50

課題1104 (optional)

コンソールに整数をいくつか入力して、その整数を昇順に並べて表示するプログラム BubbleSort.java をパッケージ j1.lesson11 に作成しなさい。

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

プログラム全体
    print "要素数を入力:"
    count = コンソール入力 (整数)
    if count が負の値
        print "要素数には0以上の値を入力してください"
        プログラムの終了
    values = 要素数 count の新しい配列 (int[])
    for i = 0 から values の長さ - 1 まで
        print "要素を入力"
        values[i] = コンソール入力 (整数)
    print "整列前の配列:", 改行
    print-array(values)
    sort(values)
    print "整列後の配列:", 改行
    print-array(values)

ただし、擬似コードにある sort を表すメソッドとして、sort という名前のメソッドを作成すること。仮引数の型は (int[]) とし、戻り値の型は void とする。このメソッドは引数に int[] 型の入力された値のリストを取り、その配列の各要素を昇順に並ぶように書き換える。

また、擬似コードにある print-array では、与えられた int[] 型の値に対して次のような擬似コードで表されるように出力を行うこと。

print-array(a)
    print "{"
    if 配列の長さが 0 でない
        print a[0]
        for i を 1 から a の長さ - 1
            print ", "
            print a[i]
    print "}", 改行

結果の例

入力に順に 10, 1, 3, 5, 7, 9, 8, 6, 4, 2, 0 を指定した場合、プログラムを終了まで実行した際のコンソールは以下のようになっている。

要素数を入力:10
要素を入力:1
要素を入力:3
要素を入力:5
要素を入力:7
要素を入力:9
要素を入力:8
要素を入力:6
要素を入力:4
要素を入力:2
要素を入力:0
整列前の配列:
{1, 3, 5, 7, 9, 8, 6, 4, 2, 0}
整列後の配列:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

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

要素数を入力:-1
要素数には0以上の値を入力してください

ヒント

課題のクラス名にもあるバブルソートは、配列をソートする簡単なアルゴリズムである。

この手順の考え方は、次のようなものである。

for j を (a の長さ - 2) から0 まで
    if a[j] が a[j+1] よりも大きい
        a[j] と a[j+1] の値を入れ替える

を実行すると、a[0]に一番小さな値が入る。次に、

for j を (a の長さ - 2) から1 まで
    if a[j] が a[j+1] よりも大きい
        a[j] と a[j+1] の値を入れ替える

を実行すると、その次に小さな値がa[1]に入る。

このような操作を (2重のループとして) 繰り返して、配列全体をソートする (大小順に並べ替える) のがバブルソートである。

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

メッセージ 詳細
期待された結果と異なります (メソッド名)を起動した結果が期待された結果と異なる。テスト項目を参照
範囲外のインデックスにアクセスしました 配列を操作する際に、0未満または配列長以上の値をインデックスとしている。直接プログラムを実行して結果を調べたり、エラーメッセージの2行目にあるat以下を参考にプログラムを見直す
無限ループの可能性 一定時間内にプログラムが終了しなかった。ループが無限に続いていないか確認

単体テストの項目

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

項目名 詳細
Sort_empty sort メソッドを実引数 ({}) で呼び出した
Sort_1 sort メソッドを実引数 ({1}) で呼び出した
Sort_sorted sort メソッドを実引数 ({1,2,3,4,5}) で呼び出した
Sort_rsorted sort メソッドを実引数 ({5 4,3,2,1}) で呼び出した
Sort_shuffled sort メソッドを実引数 ({1,3,5,4,2}) で呼び出した

機能テスト

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

機能テストの項目

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

項目名 詳細
M5 入力が -5
M1 入力が -1
0 入力が 0
1 入力が 1, 0
5 入力が 5, 1, 3, 5, 4, 2