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

Java中按索引对比两个ArrayList元素以计算测验得分的实现方法

问题原因分析
  • 列表赋值反转:storeCorrectAnswers() 是获取正确答案的方法,却赋值给了存储用户答案的userAnswers变量;askQuestionsOneByOne()是获取用户作答的方法,反而赋值给了correctAnswers变量,基础赋值逻辑错误。
  • 循环逻辑不符合需求:需求要求按相同索引逐位对比,不需要嵌套循环。当前嵌套循环会把两个列表的所有元素交叉匹配,只要两个列表存在相同值不管位置是否对应都会加分,完全不符合评分规则。
  • 字符串对比方式错误:Java中String是引用类型,==对比的是对象的内存地址而非字符串内容,应该使用equals()方法或者Objects.equals()做内容对比,后者还可以避免空指针异常。
  • 缺少边界校验:如果两个列表长度不一致(比如用户漏答题目、题目数量配置错误),直接按索引遍历会触发数组越界异常。
正确实现代码
import java.util.ArrayList;
import java.util.Objects;

// 修正列表赋值逻辑
ArrayList<String> correctAnswers = storeCorrectAnswers();
ArrayList<String> userAnswers = askQuestionsOneByOne();

int score = 0;
// 取两个列表的最小长度遍历,避免索引越界
int minSize = Math.min(correctAnswers.size(), userAnswers.size());
for (int i = 0; i < minSize; i++) {
    // 按相同索引取值,用Objects.equals对比内容,兼容空值场景避免空指针
    if (Objects.equals(correctAnswers.get(i), userAnswers.get(i))) {
        score++;
    }
}
// 可根据业务需求选择是否增加长度校验逻辑
if (correctAnswers.size() != userAnswers.size()) {
    // 此处可替换为抛出异常、记录日志、未答题目按答错处理等业务逻辑
    throw new IllegalArgumentException("正确答案数量与用户作答数量不匹配");
}
return score;

内容的提问来源于stack exchange,提问作者Adwait Kulkarni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:15:05