【问题标题】:Why 2D array for-loop checking cannot access some values?为什么二维数组 for 循环检查无法访问某些值?
【发布时间】:2021-12-31 21:24:21
【问题描述】:
private static String[][] menuList = {{"Soda","10"},{"Coke","20"},{"Water","5"}};

public Drinks(String menu, String size) {
    setMenu(menu);
    setSize(size);
}

public void setMenu(String menu) {
    this.menu = menu;
    for (int i = 0; i < menuList.length; i++) {
        if (this.menu.equalsIgnoreCase(menuList[i][0])){
            price = Double.valueOf(menuList[i][1]);
        }else{price = 0.0;}
    }
}

然后我创建用于测试的对象
我无法获取 menuList[][] 中前两行的价格 但我仍然可以得到最后一个

    Drinks d = new Drinks("water","L");
    Drinks e = new Drinks("coke","L");
    Drinks f = new Drinks("soda","L");
    System.out.println(d);
    System.out.println(e);
    System.out.println(f);

输出是

Drink[menu = water , size = L , price = 5.00]
Drink[menu = coke , size = L , price = 0.00]
Drink[menu = soda , size = L , price = 0.00]

我只想知道为什么?我该如何解决这个问题?

【问题讨论】:

  • 你的price字段是静态的吗?
  • 不,这只是 // 私人双倍价格;
  • 找到匹配项后,您需要跳出循环。否则它将继续循环并再次将price 设置为0.0
  • 谢谢,它的作品。我需要再复习一下基本的java。

标签: java arrays for-loop


【解决方案1】:

您实际上在做的是,对于menuList 中的每个条目,您检查它的名称是否与您的参数相对应,并且每次都设置(即覆盖)价格字段。它的工作原理与您没有循环但仅检查 last 项相同。

解决办法是跳出循环。我还更改了您初始化变量的位置,以确保它完全被初始化

public void setMenu(String menu) {
    this.menu = menu;
    price = 0.0;
    for (int i = 0; i < menuList.length; i++) {
        if (this.menu.equalsIgnoreCase(menuList[i][0])){
            price = Double.valueOf(menuList[i][1]);
            break;
        }
    }
}

【讨论】:

  • 非常感谢。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多