0

このコードの目的は、2 つの異なる string[] 配列を比較し、一致する要素の数を確認することです。これにより、メソッドは、学生がテストに合格したか不合格だったかを確認し、成績を決定することができます。ただし、すべてのテストが行​​われると、合格には true が返され、文字のグレードには "A" が返されます。要素が正しく比較されるようになったので、すべての要素が .equals() を渡すという問題がまだ残っています。つまり answerKey[1] = "B"; studentAnswers[1] = "C"; 、これら 2 つの要素を比較する場合、.equals().

public class ListOfAnswers
{
    static final String[] answerKey = {"A", "B", "B", "C", "D", "B", "C", "C", "D", "E",
                                       "C", "D", "D", "E", "A", "A", "A", "D", "D", "E"};
    String[] studentAnswers;

    public ListOfAnswers(String[] ans)
    {
        studentAnswers = ans;
    }

    public boolean checkPassOrFail()
    {
        int answersRight = 0;
        for (int cnt = 0; cnt < studentAnswers.length; cnt++)
        {
            if(studentAnswers[cnt].equals(answerKey[cnt]))
            {
                answersRight++;
            }
        }
        if (answersRight >= 14)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public String computeGrade()
    {
        int score = 0;
        String grade = "";
        for (int cnt = 0; cnt < studentAnswers.length; cnt++)
        {
            if (studentAnswers[cnt].(answerKey[cnt]))
            {
                score++;
            }
        }

        if (score < 10)
        {
            grade = "E";
        }
        else if (score == 10)
        {
            grade = "D";
        }
        else if ((score==11)||(score==12))
        {
            grade = "C-";
        }
        else if (score==13)
        {
            grade = "C";
        }
        else if (score == 14)
        {
            grade = "C+";
        }
        else if (score == 15)
        {
            grade = "B-";
        }
        else if (score == 16)
        {
            grade = "B";
        }
        else if (score == 17)
        {
            grade = "B+";
        }
        else if (score == 18)
        {
            grade = "A-";
        }
        else if ((score == 19)||(score==20))
        {
            grade = "A";
        }
        return grade;
    }
} 

テストデータは次のようになります

public class ListOfAnswersTester
{
    public static void main(String[] args)
    {
        String[] danAnswers = {"A", "B", "B", "D", "D", "B", "C", "C", "D", "E", "C",
                               "D", "D", "E", "A", "A", "A", "D", "D", "E"};
        ListOfAnswers danAnswerList = new ListOfAnswers(danAnswers);

        String[] bobAnswers = {"A", "C", "B", "C", "D", "B", "C", "C", "D", "E", "C",
                               "D", "A", "E", "A", "A", "A", "D", "E", "E"};
        ListOfAnswers bobAnswerList = new ListOfAnswers(danAnswers);

        System.out.println("Student Dan's Pass/Fail: " + danAnswerList.checkPassOrFail());
        System.out.println("Student Dan's Grade: " + danAnswerList.computeGrade());

        System.out.println("Student Bob's Pass/Fail: " + bobAnswerList.checkPassOrFail());
        System.out.println("Student Bob's Grade: " + bobAnswerList.computeGrade());
     }
}
4

3 に答える 3

0

ここにタイプミスがあります:

ListOfAnswers bobAnswerList = new ListOfAnswers(danAnswers);

次のようにする必要があります。

ListOfAnswers bobAnswerList = new ListOfAnswers(bobAnswers);

または、Dan の良い答えを Bob に与えます ;)

ああ、他の人が言ったように、equals(null 以外の) 文字列を比較するときは常に使用してください。

于 2013-05-08T15:43:26.720 に答える