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
相关产品推荐
相关产品推荐

