我需要比较从文件中读取的测试答案。该文件如下所示:
第1行=回答键
第3行及以下=学生ID +学生答案测试
TTFTFTTTFTFTFFTTFTTF
ABC54102 T FTFTFTTTFTTFTTF TF
DEF56278 TTFTFTTTFTFTFFTTFTTF
ABC42366 TTFTFTTTFTFTFFTTF
ABC42586 TTTTFTTT TFTFFFTF
我将答案键(第1行)放在名为ansKey的字符串中,带有.nextLine()。然后我循环打印学生ID,并将该学生的答案放在另一个字符串中并将两者都传递给方法:
Scanner inFile = new Scanner(file);
while(inFile.hasNextLine())
{
//Student ID
System.out.print("\t" + inFile.next());
//Student Answers
studentAnswers = inFile.nextLine();
System.out.print("\t" + studentAnswers);
//Get examGrade
testGrade = examGrade(ansKey, studentAnswers.trim());
//Display scores
System.out.println(testGrade);
}
在我的方法中,我有一个for循环进行比较:
public static String examGrade(String ansKey, String studentAnswers)
{
for(int i = 0; i < studentAnswers.length(); i++)
{
if(ansKey.charAt(i) == studentAnswers.charAt(i))
score += 2;
else if(studentAnswers.charAt(i) == ' ')
score += 0;
else
score -= 1;
}
}
所有这一切都很好。除了我的教授不希望我使用trim()。如果我拿出来,我会得到ArrayIndexOutOfBounds。我使用trim()的原因是因为当我用.nextLine()读取时,studentAnswers前面有一个空格。我不能使用.next(),因为一些答案之间有空格。
我不相信我可以使用我已经在我的代码中使用的任何东西(这里没有看过类,数组等等)。我可以使用StringBuffer和StringTokenizer。但不确定这些课程对我有何帮助。任何帮助将不胜感激!
答案 0 :(得分:1)
好的,如果您不能使用trim()
或substring()
,那么您必须使用算术
public static String examGrade(String ansKey, String studentAnswers)
{
//Now only go up to the answer key length
for(int i = 0; i < ansKey.length(); i++)
{
//shift the index we are checking the student answers by 1
int j = i + 1;
if(ansKey.charAt(i) == studentAnswers.charAt(j))
score += 2;
else if(studentAnswers.charAt(j) == ' ')
score += 0;
else
score -= 1;
}
}