我根据以下说明创建了我的程序。当我运行我的程序时,我输出的错误答案是我错过的。例如,如果我输入所有正确答案但#19,则在输出数据的错误答案部分中输入1或2。我做错了什么?
当地驾驶执照办公室已要求您编写一个程序,对许可证考试的书面部分进行评分。考试有20个多项选择题。这是正确的答案:
1. B 2. D 3. A 4. A
5. C 6. A 7. B 8. A
9. C 10. D 11.B 12. C
13. D 14. A 15. D 16. C
17. C 18. B 19. D 20. A
学生必须正确回答20个问题中的15个问题才能通过考试。
编写一个名为DriverExam的类,它在数组字段中保存正确的考试答案。该课程应该有一个数组字段来保存学生的答案。该类应具有以下方法:
通过。如果学生通过考试,该方法返回true,否则返回false totalCorrect:返回正确回答的问题的总数 totalIncorrect:返回错误回答的问题总数 questionsMissed:一个int数组,包含学生错过的问题的问题编号 在测试程序中演示该课程,要求用户输入学生的答案,然后显示从DriverExam课程方法返回的结果。
Input validation: only accept the letters A, B, C, or D as answers
这是我的输出数据:
Driver's License Exam
20 Multiple-Choice Questions
Mark A, B, C, D
1: B
2: D
3: A
4: A
5: C
6: A
7: B
8: A
9: C
10: D
11: B
12: C
13: D
14: A
15: D
16: C
17: C
18: B
19: D
20: C
RESULTS
Total Correct: 19
Total Incorrect: 1
Passed: YES
The incorrect answers are:
2
public class DriverExam
{
//An array containing a student's answers
private String[] correctAnswers =
{"B", "D", "A", "A", "C", "A",
"B", "A", "C", "D",
"B", "C", "D", "A",
"D", "C", "C", "B", "D", "A"};
//Store the user's answers
private String[] userAnswers;
int[] missed = new int[correctAnswers.length];
//Process the user's answers
public DriverExam (String[] Answers)
{
userAnswers = new String[Answers.length];
for (int i = 0; i < Answers.length; i++)
{
userAnswers[i] = Answers[i];
}
}
//Returns a boolean value if correct answers > 15
public boolean passed()
{
if (totalCorrect() >= 15)
return true;
else
return false;
}
//Determines the total correct answers
public int totalCorrect()
{
int correctCount = 0;
for (int i = 0; i < correctAnswers.length; i++)
{
if (userAnswers[i].equalsIgnoreCase(correctAnswers[i]))
{
correctCount++;
}
}
return correctCount;
}
//Determines the total incorrect answers
public int totalIncorrect()
{
int incorrectCount = 0;
for (int i = 0; i < correctAnswers.length; i++)
{
if (!userAnswers[i].equalsIgnoreCase(correctAnswers[i]))
{
missed[incorrectCount] = 1;
incorrectCount++;
}
}
return incorrectCount;
}
//Missed questions
public int[] questionsMissed()
{
return missed;
}
}
//end of DriverExam class
----------------------------------------------------------------------------
import java.util.Scanner;
public class DriverExamApplication
{
public static void main(String[] args)
{
System.out.println(" Driver's License Exam ");
Scanner input = new Scanner(System.in);
System.out.println(" 20 Multiple-Choice Questions ");
System.out.println(" Mark A, B, C, D ");
//Inputting string
String[] answers = new String[20];
String answer;
for (int i = 0; i < 20; i++)
{
do
{
System.out.print((i+1) + ": ");
answer = input.nextLine();
} while (!isValidAnswer(answer));
answers[i] = answer;
}
//Process
DriverExam exam = new DriverExam(answers);
//Results
System.out.println(" RESULTS ");
//Outputting total correct
System.out.println("Total Correct: " + exam.totalCorrect());
//Outputting total incorrect
System.out.println("Total Incorrect: " + exam.totalIncorrect());
String passed = exam.passed() ? "YES" : "NO";
//Result pass or fail
System.out.println("Passed: " + passed);
if (exam.totalIncorrect() > 0)
{
System.out.println("The incorrect answers are: ");
int missedIndex;
for (int i = 0; i < exam.totalIncorrect(); i++)
{
missedIndex = exam.questionsMissed()[i]+1;
System.out.print(" " + missedIndex);
}
}
} //end of main function
//Returns true when answer is valid
public static boolean isValidAnswer (String answer)
{
return "A".equalsIgnoreCase(answer) ||
"B".equalsIgnoreCase(answer)
|| "C".equalsIgnoreCase(answer) ||
"D".equalsIgnoreCase(answer);
}
} //end of Test class
答案 0 :(得分:0)
问题在于totalIncorrect
函数,您始终指定1
而不是i
。这应该有效:
//Determines the total incorrect answers
public int totalIncorrect()
{
int incorrectCount = 0;
for (int i = 0; i < correctAnswers.length; i++)
{
if (!userAnswers[i].equalsIgnoreCase(correctAnswers[i]))
{
missed[incorrectCount] = i;
incorrectCount++;
}
}
return incorrectCount;
}