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

Java二维数组for循环校验时无法获取前几行值是什么原因?

问题产生原因

你的setMenu方法的遍历逻辑存在覆盖问题:循环每次执行时,无论之前是否匹配到了对应菜单,只要当前遍历项不匹配,就会把price重新赋值为0.0。
举个实际运行的例子:当你传入coke查询价格时

  • 第1次循环遍历到Soda,不匹配,price设为0.0
  • 第2次循环遍历到Coke,匹配成功,price设为20.0
  • 第3次循环遍历到Water,不匹配,price又被覆盖为0.0

只有查询最后一项Water时,匹配成功后没有后续循环覆盖price的值,所以仅最后一项价格正常。

修复方案

提供两种常用修复方式,选其一即可:

方式1:匹配成功后直接终止循环

修改setMenu方法,匹配到对应菜单后用break跳出循环,避免后续遍历覆盖价格:

public void setMenu(String menu) {
    this.menu = menu;
    price = 0.0; // 先初始化默认价格为0
    for (int i = 0; i < menuList.length; i++) {
        if (this.menu.equalsIgnoreCase(menuList[i][0])){
            price = Double.valueOf(menuList[i][1]);
            break; // 匹配到直接结束循环
        }
    }
}

方式2:移除else分支的赋值逻辑

只在匹配成功时修改价格,默认提前初始化价格为0即可,不用每次不匹配都重新赋值:

public void setMenu(String menu) {
    this.menu = menu;
    price = 0.0; // 初始默认价格为0
    for (int i = 0; i < menuList.length; i++) {
        if (this.menu.equalsIgnoreCase(menuList[i][0])){
            price = Double.valueOf(menuList[i][1]);
        }
    }
}

两种方式修改后,所有匹配到的菜单都能正常返回对应价格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:15:01