第12週目課題

課題1201

コンソールから入力された文字列が回文であるかどうか調べるプログラム Palindrome.java をパッケージ j1.lesson12 に作成しなさい。

abcba, aadaa, xyyyx, sbs, aa, abccbaなどは、左から読んでも右から読んでも同じである。このようなものは回文(palindrome)と呼ばれる。

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

プログラム全体
    print "文字列を入力:"
    input = コンソール入力 (文字列)
    if input が回文
        print input "は回文です"
    else
        print input "は回文ではありません"

ただし、擬似コードにある input が回文であるかどうかを調べるメソッドとして、isPalindrome という名前のメソッドを作成すること。仮引数の型は (String) とし、戻り値の型は boolean とする。このメソッドは引数に String 型の文字列を取り、与えられた文字列に対して、その文字列が回文である場合は true, そうでない場合は false を返す。

結果の例

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

文字列を入力:なつまでまつな
なつまでまつなは回文です

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

かいぶんでないは回文ではありません

ヒント

骨格を作成する際に、boolean 型のメソッドではダミーの return 文として

return false;

を用意するとよい。

String 型で表される文字列 s の文字数は s.length() で得られる。回文なら s.charAt(0) と s.charAt(s.length()-1) などは同じ文字である

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

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

単体テストの項目

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

項目名 詳細
IsParindrome_a isPalindrome メソッドを実引数 ("a") で起動
IsParindrome_aa isPalindrome メソッドを実引数 ("aa") で起動
IsParindrome_ab isPalindrome メソッドを実引数 ("ab") で起動
IsParindrome_aba isPalindrome メソッドを実引数 ("aba") で起動
IsParindrome_abb isPalindrome メソッドを実引数 ("abb") で起動
IsParindrome_abc isPalindrome メソッドを実引数 ("abc") で起動
IsParindrome_abcaba isPalindrome メソッドを実引数 ("abcaba") で起動
IsParindrome_Paper isPalindrome メソッドを実引数 ("しんぶんし") で起動
IsParindrome_Sample1 isPalindrome メソッドを実引数 ("なつまでまつな") で起動
IsParindrome_Sample2 isPalindrome メソッドを実引数 ("かいぶんでない") で起動

機能テスト

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

機能テストの項目

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

項目名 詳細
Sample1 入力に なつまでまつな
Sample2 入力に かいぶんでない

課題1202

3x3行列の掛け算を行うプログラム MatrixMult.java をパッケージ j1.lesson12 に作成しなさい。

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

プログラム全体
    a = 3x3の新しい配列 (double[][])
    for i = 0 to 2
        for j = 0 to 2
            print "a[" i "][" j "] = "
            a[i][j] = コンソール入力 (実数)
    b = 3x3の新しい配列 (double[][])
    for i = 0 to 2
        for j = 0 to 2
            print "b[" i "][" j "] = "
            b[i][j] = コンソール入力 (実数)
    c = a * b
    print c

ただし、擬似コードにある行列の掛け算を行うメソッドとして、mult という名前のメソッドを作成すること。仮引数の型は (double[][], double[][]) とし、戻り値の型は double[][] とする。このメソッドは引数に 3行3列の行列を2つとり、(第一引数に渡された行列) * (第二引数に渡された行列)を計算した結果を新しい3行3列の行列 (2次元配列) として返す。また、このメソッドでは「行列のi行j列目」は「配列の[i][j]」を指すものとする。また、引数に与えられた配列を変更しないこと。

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

行列の表示(matrix)
    for i = 0 to matrixの長さ - 1
        for j = 0 to matrix[i]の長さ - 1
            print matrix[i][j] " "
        print 改行

結果の例

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

a[0][0] = 1.0
a[0][1] = 2.0
a[0][2] = 3.0
a[1][0] = 4.0
a[1][1] = 5.0
a[1][2] = 6.0
a[2][0] = 7.0
a[2][1] = 8.0
a[2][2] = 9.0
b[0][0] = 2.0
b[0][1] = 0.0
b[0][2] = 0.0
b[1][0] = 0.0
b[1][1] = 2.0
b[1][2] = 0.0
b[2][0] = 0.0
b[2][1] = 0.0
b[2][2] = 2.0
2.0 4.0 6.0 
8.0 10.0 12.0 
14.0 16.0 18.0 

b は単位行列を 2 倍したものなので、a の行列を 2 倍したものが出力されている。

ヒント

各要素が aij から成るl行m列の行列 A と、各要素が bij から成るm行n列の行列 B とを掛け合わせて各要素が cij から成るl行n列の行列 C を作成する場合、cij は以下の式で表される。


この問題では、3行3列の行列2つを掛け合わせるので、l, m, n 共に 3 である。

余裕があれば3行3列のみでなく、l行m列の行列とm行n列の行列を掛け合わせられるようにせよ。そちらのほうが適用範囲が広い。

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

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

単体テストの項目

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

項目名 詳細
Mult_Sample mult メソッドを実引数 ({ {1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}, {7.0, 8.0, 9.0} }, { {2.0, 0.0, 0.0}, {0.0, 2.0, 0.0}, {0.0, 0.0, 2.0} }) で起動
Mult_Inverse mult メソッドを実引数 ({ {3.0, 2.0, 1.0}, {2.0, 1.0, 2.0}, {2.0, 2.0, 3.0} }, { {0.2, 0.8, -0.6}, {0.4, -1.4, 0.8}, {-0.4, 0.4, 0.2} }) で起動

機能テスト

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

機能テストの項目

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

項目名 詳細
Sample1 入力が 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 0, 0, 0, 2, 0, 0, 0, 2
Sample2 入力が 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1

課題1203 (optional)

3チーム (チーム0, チーム1, チーム2)から成るリーグ戦の成績から、勝ち点を計算するプログラム LeagueStanding.java をパッケージ j1.lesson12 に作成しなさい。

このプログラムでは、まずリーグ戦の各試合の得失点差を入力し、その得失点差のテーブルを作成する。

得失点差を記憶する3x3の二次元配列 a があったとすると、リーグの各試合の得失点差を次のように格納すること。

チーム0 チーム1 チーム2
チーム0 a[0][0] a[0][1] a[0][2]
チーム1 a[1][0] a[1][1] a[1][2]
チーム2 a[2][0] a[2][1] a[2][2]

つまり、チーム i と チーム j が試合をした際の結果は a[i][j] に格納され、その値は (チーム i の得点) - (チーム j の得点) である。 (ただし、チーム i と チーム j が試合をしたということは、チーム j と チーム i が試合をしたともいえる。)

試合は合計で 3 回行われ、プログラム内では、チーム 0 対 チーム 1、チーム 0 対 チーム 2、チーム 1 対 チーム 2 の順に得失点差を問う。

また、勝ち点の計算は、試合に勝った場合に 1.0 点追加され、引き分けの場合に 0.5 点追加され、負けた場合は勝ち点に変化がない。

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

プログラム全体
    得失点のテーブル = 3x3 の新しい配列(int[])
    for i = 0 to 1
        print "チーム" i "の成績", 改行
        for j = i + 1 to 2
            print "  チーム" j "との得失点差:"
            score = コンソール入力 (int)
            該当する得失点のテーブルを埋める
    victories = count-victories(得失点のテーブル)
    for i = 0 to 2
        print "チーム" i ": "
        print "勝ち点" victories[i]
        print 改行

ただし、擬似コードにある count-victories を表すメソッドとして、countVictories という名前のメソッドを作成すること。仮引数の型は (int[][]) とし、戻り値の型は double[] とする。このメソッドは引数に int[][] 型の得失点のテーブルをとり、各チームの勝ち点を格納した double[] 型の値を返す。また、引数に与えられた配列を変更しないこと。

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

countVictories メソッドに与えられる配列の要素数が 3 x 3 以外(2x2, 4x4 など)であっても対処できるようにメソッドを作成すること (ただし与えられる配列は正方行列の形しかとらないものとする)。

結果の例

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

チーム0の成績
  チーム1との得失点差:-2
  チーム2との得失点差:3
チーム1の成績
  チーム2との得失点差:1
チーム0: 勝ち点1.0
チーム1: 勝ち点2.0
チーム2: 勝ち点0.0

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

チーム0の成績
  チーム1との得失点差:0
  チーム2との得失点差:-2
チーム1の成績
  チーム2との得失点差:-1
チーム0: 勝ち点0.5
チーム1: 勝ち点0.5
チーム2: 勝ち点2.0

ヒント

チーム 0 と チーム 1 が試合をして、得失点差 1 でチーム 0 が勝った場合、チーム 1 は得失点差 - 1 で負けたことになる。

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

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

単体テストの項目

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

項目名 詳細
CountVictories_2_even countVictories メソッドを実引数 ({ {0, 0}, {0, 0} }) で呼び出した
CountVictories_2_won1 countVictories メソッドを実引数 ({ {0, 5}, {-5, 0} }) で呼び出した
CountVictories_2_won2 countVictories メソッドを実引数 ({ {0, -5}, {5, 0} }) で呼び出した
CountVictories_3_even countVictories メソッドを実引数 ({ {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }) で呼び出した
CountVictories_3_1_2_3 countVictories メソッドを実引数 ({ {0, 1, 1}, {-1, 0, 1}, {-1, -1, 0} }) で呼び出した
CountVictories_3_2_3_1 countVictories メソッドを実引数 ({ {0, -1, -1}, {1, 0, 1}, {1, -1, 0} }) で呼び出した
CountVictories_3_3_1_2 countVictories メソッドを実引数 ({ {0, 1, -1}, {-1, 0, -1}, {1, 1, 0} }) で呼び出した
CountVictories_Sample2 countVictories メソッドを実引数 ({ {0, 0, 2}, {0, 0, 1}, {-2, -1, 0} }) で呼び出した

機能テスト

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

機能テストの項目

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

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

課題1204 (optional)

1桁の数字, '+', '-' のみからなる式をコンソールから入力し、それを式としてみなして計算した結果を表示するプログラム SimpleCalc.java をパッケージ j1.lesson12 に作成しなさい。

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

プログラム全体
    print "式を入力:"
    expression = コンソール入力 (文字列)
    if is-valid(expression)
        print calculate(expression)
    else
        print "不正な文字列です"

ただし、擬似コードにある calculate を表すメソッドとして、calculate という名前のメソッドを作成すること。仮引数の型は (String) とし、戻り値の型は int とする。このメソッドは引数に与えられた1桁の数字, '+', '-' のみからなる文字列を式とみなし、その式を計算した結果を返す。数字, '+', '-'以外の文字を含んでいた場合については考慮しなくてよい。

また、擬似コードにある is-valid を表すメソッドとして、isValid という名前のメソッドを作成すること。仮引数の型は (String) とし、戻り値の型は boolean とする。このメソッドは引数に与えられた文字列が、1桁の数字, '+', '-' のみからなる文字列であるかどうかを判定し、これらの文字のみで構成された文字列であれば true を返し、それ以外の場合は false を返す。

この課題を解くにあたって、次の2つのメソッドを使うとよい。

Character.isDigit(char c)
c が '0' ~ '9' のいずれかであれば true を返す
Character.getNumericValue(char c)
c が数値を表す文字であった場合、c を数値とみなした値を返す。
つまり、'0' は 0, '1' は 1, ... が返される。

これは Math.sqrt(double) や Math.abs(int) のときと同様に、最初からJavaに組み込まれているので宣言しなくても使える。

if (Character.isDigit('0')) {
    System.out.println("'0' は数字");
}
else {
    System.out.println("'0' は数字でない");
}
int result = Character.getNumericValue('1') + Character.getNumericValue('2');
System.out.println("1 + 2 は " + result);

結果の例

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

式を入力:3+4-5
2

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

式を入力:a
不正な文字列です

ヒント

このプログラムで入力できる式は、最初の数値を除いて、すべて以下の形になっている。

(左側) <演算子> <数値> ...

<数値>までの途中結果は、以下のように計算できる。

途中結果 = (左側を計算した結果) <演算子> <数値>

(左側を計算した結果)は、直前までの途中結果であり、<演算子>には + または - が入る。

手順

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

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

テストの失敗メッセージ

骨格テスト

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

単体テスト

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

単体テストの項目

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

項目名 詳細
IsValid_1 isValid メソッドを実引数 ("1") で呼び出した
IsValid_P isValid メソッドを実引数 ("1+1") で呼び出した
IsValid_M isValid メソッドを実引数 ("1-1") で呼び出した
IsValid_Mix isValid メソッドを実引数 ("0+1-2+3-4+5-6+7-8+9") で呼び出した
IsValid_A isValid メソッドを実引数 ("a") で呼び出した
IsValid_Comma isValid メソッドを実引数 (",") で呼び出した
IsValid_Dot isValid メソッドを実引数 (".") で呼び出した
IsValid_Middle isValid メソッドを実引数 ("0+1-2+3-4?5-6+7-8+9") で呼び出した
Calculate_1 calculate メソッドを実引数 ("1") で呼び出した
Calculate_P calculate メソッドを実引数 ("1+1") で呼び出した
Calculate_M calculate メソッドを実引数 ("1-1") で呼び出した
Calculate_Plong calculate メソッドを実引数 ("0+1+2+3+4+5+6+7+8+9") で呼び出した
Calculate_Mlong calculate メソッドを実引数 ("0-1-2-3-4-5-6-7-8-9") で呼び出した
Calculate_Mix calculate メソッドを実引数 ("0+1-2+3-4+5-6+7-8+9") で呼び出した

機能テスト

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

機能テストの項目

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

項目名 詳細
Sample1 入力が 3+4+5
Sample2 入力が a