检查两个元素是否相同,每个元素来自不同的字符串数组

时间:2013-05-08 15:23:09

标签: java arrays string bluej

此代码的目标是比较两个不同的string []数组,并检查有多少元素匹配。这将允许方法然后查看学生是否通过测试,以及确定他们的字母等级。但是,每次完成的测试都会导致为他们传递真实的返回,并且为他们的字母等级返回“A”。既然正确地比较了元素,我仍然会遇到通过.equals()的每个元素的问题。 即 answerKey[1] = "B"; studentAnswers[1] = "C"; 如果要比较这两个元素,它将通过.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());
     }
}

3 个答案:

答案 0 :(得分:2)

问题在于:

if(studentAnswers[cnt] == answerKey[cnt])

要比较String和其他对象实例,必须使用equals方法:

if(studentAnswers[cnt].equals(answerKey[cnt]))

必须在ListOfAnswers#checkPassOrFailListOfAnswers#computeGrade两种方法中修复此问题。

答案 1 :(得分:1)

在Java中,当您想要比较对象时,必须使用equal();

studentAnswers[cnt] == answerKey[cnt]

studentAnswers[cnt].equals(answerKey[cnt])

答案 2 :(得分:0)

我在这里看到一个错字:

ListOfAnswers bobAnswerList = new ListOfAnswers(danAnswers);

应该是:

ListOfAnswers bobAnswerList = new ListOfAnswers(bobAnswers);

或者你给丹给鲍尔的好答案;)

哦,正如其他人所说,在比较(非空)字符串时总是使用equals,除非你真的想检查身份(我看到问题已经更新了)。