Java使用LinkedList存储球场收入时打印两次不同结果的原因是什么
问题原因分析
- 单场收入变量被篡改,底层存储数据错误:你没有单独定义总收益临时变量,直接用接收单场赛事收入的
rev变量做累加计算。计算完成后rev已经变为总收益数值,下次循环开头执行gameRevenue.add(rev)时,存入列表的不是本场的单场收入,而是累加后的总收益,后续所有计算的基础数据全部失真。 - 遍历匹配时重复输出中间结果:遍历历史记录的过程中,每匹配到一条同名球场的记录就会打印一次当前的累加值,因此如果该球场有N条历史赛事记录,你就会看到N次输出,只有最后一次输出的是当前正确的总收益,前面的都是未完成累加的中间值,自然和预期金额不符。
- 逻辑顺序不符合需求设计:需求要求所有赛事数据录入完成后再执行查询操作,但你当前把查询逻辑嵌在了新增赛事的分支中,每次新增完一场赛事就会触发一次查询;且循环开头直接先执行add操作,首次循环如果
name和rev没有初始化,还会存入无效的脏数据。
修复建议
- 拆分数据录入和查询逻辑:先完成所有赛事数据的录入,确认所有数据都正确存入
stadiumNames和gameRevenue两个LinkedList后,再单独开发查询功能。 - 累加总收益时单独声明临时变量,不要修改存储单场收入的
rev变量,参考代码如下:
// 球场总收益查询示例 Scanner scan = new Scanner(System.in); System.out.println("请输入要查询的球场名称:"); String targetStadium = scan.next(); double totalRevenue = 0.0; for (int i = 0; i < stadiumNames.size(); i++) { if (stadiumNames.get(i).equals(targetStadium)) { totalRevenue += gameRevenue.get(i); } } System.out.println(targetStadium + " 所有赛事总收益为:" + totalRevenue);
- 调整录入逻辑的执行顺序:先读取用户输入的球场名和单场收入,再将两条数据对应存入两个LinkedList,避免先存后读导致的脏数据问题。
内容的提问来源于stack exchange,提问作者Christopher Prinze
相关产品推荐
相关产品推荐

