You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于顺序搜索的字符数组比较问题:驾照考试评分程序错误排查

问题分析与修复方案

我一眼就看出你的代码里有两个关键问题,导致错误统计完全不符合预期,咱们一步步拆解解决:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:14:14