此代码的目标是比较两个不同的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());
}
}
答案 0 :(得分:2)
问题在于:
if(studentAnswers[cnt] == answerKey[cnt])
要比较String
和其他对象实例,必须使用equals
方法:
if(studentAnswers[cnt].equals(answerKey[cnt]))
必须在ListOfAnswers#checkPassOrFail
和ListOfAnswers#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
,除非你真的想检查身份(我看到问题已经更新了)。