基于顺序搜索的字符数组比较问题:驾照考试评分程序错误排查
问题分析与修复方案
我一眼就看出你的代码里有两个关键问题,导致错误统计完全不符合预期,咱们一步步拆解解决:
1. 核心问题:数组索引完全错位
你把第1题的用户答案存在了student[1],但correct数组的第1题答案在correct[0](因为Java数组从0开始索引)。而你的gradeExam方法里,直接拿correct[i]和student[i]对比——这意味着第1题的正确答案correct[0]在和student[0](空字符,数组默认初始值)对比,第一次循环就会判定为错误,直接返回1,后面的题目根本没机会被检查!
2. 统计逻辑错误
原方法里一遇到第一个不匹配就立刻返回1,还额外让循环变量i自增,这完全不是统计所有错误的逻辑,而是只要有一个错误就直接返回1,根本不会遍历完所有题目。
修复后的完整代码
import java.util.Scanner; public class DriverTest { public static void main(String[] args) { Scanner kb = new Scanner(System.in); final int NUMBER_QUESTIONS = 20; char[] correct = {'A','A','A','A','A', 'B','B','B','B','B', 'C','C','C','C','C', 'D','D','D','D','D'}; char[] student = new char[NUMBER_QUESTIONS + 1]; System.out.println("Enter your answers to the exam questions."); for(int i = 1; i <= NUMBER_QUESTIONS; i++) { System.out.print("Question " + i + ": "); student[i] = kb.nextLine().toUpperCase().charAt(0); } System.out.println("** Incorrect answers: " + gradeExam(correct,student)); } public static int gradeExam(char[] correct, char[] student) { int incorrectCount = 0; // 初始化错误计数器 for (int i = 0; i < correct.length; i++) { // 修正索引对应关系:correct[i]对应第i+1题,匹配student[i+1] if(correct[i] != student[i+1]) { incorrectCount++; // 每发现一个错误,计数器加1 } } return incorrectCount; // 返回总错误数 } }
修复细节说明
- 索引匹配修正:把对比逻辑改成
correct[i] != student[i+1],让第i+1题的正确答案和用户输入的对应题目答案完全匹配。 - 统计逻辑重构:
- 新增
incorrectCount变量专门统计错误数量,初始值为0。 - 遇到不匹配的答案时,不再直接返回,而是让计数器自增。
- 遍历完所有20道题后,再返回最终的错误总数。
- 新增
现在你测试最后5题错误的场景,应该会正确返回5了。
内容的提问来源于stack exchange,提问作者BeeliBala
相关产品推荐
相关产品推荐

