java - 对象中的字符串不等于 ArrayList 中同一对象的字符串

标签 java string object arraylist methods

我正在使用 ArrayList 构建一个目录来保存名为 boot 的对象。

我的目录类中的方法之一遇到了问题。该方法应该遍历目录并找到具有匹配 ID(字符串值)的引导对象。

目录中充满了这些对象;像这样:

Boot boot1 = new Boot("Extreme Hiking Boot", "A123456", "For extreme terrains", "Khaki", "Canvas", "For all terrains", 65.50, 100, 5);
Boot boot2 = new Boot("Casual Hiker", "B123456", "A hiking boot for the casual person", "Brown", "Leather", "Rocky", 55.95, 200, 3);
Boot boot3 = new Boot("Broken Boot", "Y123456","A broken boot", "Yellow", "Plastic", "Soft Ground", 110.45, 400, 1);

这是导致问题的方法:

public double getPriceForProduct(String ID){
    double price = -1.0;

    for(Boot b : catalogue){
        if(b.getID().equals(ID)){
            price = b.getPrice();
        }
        else{
            System.out.println("We don't have a boot with that ID in stock.");
            System.out.println(b.getID()+"\n\n");
        }
    }
    return price;
}

它将它返回到我的控制台:

We don't have a boot with that ID in stock.
B123456


We don't have a boot with that ID in stock.
Y123456


We don't have a boot with that ID in stock.
A123456


We don't have a boot with that ID in stock.
Y123456

我有一个方法,它使用在另一种方法中设置的相同高级 for 循环,该方法在比较 double 方面效果很好。

我很困惑为什么这个高级 for 循环不起作用。

最佳答案

问题出在这里:

 for(Boot b : catalogue){
    if(b.getID().equals(ID)){
        price = b.getPrice();
    }
    else{ ...
    }
}
return price;

要点是:如果您发现某些东西......您应该立即返回!

假设第一个“boot”匹配;然后你记住返回的价格。然后继续循环...第二个、第三个... Boot 将全部匹配;并将该消息打印给您。您可以重写您的方法,如下所示:

public double getPriceForProduct(String ID){
for(Boot b : catalogue){
    if(b.getID().equals(ID)){
        return b.getPrice();
    }
}
System.out.println("We don't have a boot with that ID in stock.");
System.out.println(ID +"\n\n");
return -1;

但这并不是一个真正好的解决方案:您确实不希望某些搜索方法显示用户消息。相反,调用此方法的代码会检查结果;如果返回-1,则表明没有找到 Boot ;并可以留言。

郑重声明: float 会带来微妙的舍入和精度问题;当你处于学习阶段时;我宁愿建议使用 int 整数价格!除此之外,另一个答案有一个很好的观点:如果您听说过异常,那么宁愿抛出异常(“找不到 Boot ”);而不是使用“特殊”返回值来指示“未找到 Boot ”!

关于java - 对象中的字符串不等于 ArrayList 中同一对象的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43295174/

相关文章:

java - 方程解析 "100-x+200"并在java中评估其值

java - 使用 JPanel 显示图像

Javamail 未读消息返回最后一条消息而不是未读消息

python - Python 3.x 中字符串的内部表示是什么

javascript - Chrome 和 Firefox 在 javascript 中检索字符而不是数组的字符串

JavaScript 按 ID 和名称将 3 个对象数组合并为 1 个对象数组

javascript - 对此,全局对象和全局范围的混淆

javascript - Javascript 中的 OOP 原则

java - Hessian 有暂停吗?

java - 是否可以将 HTML 加载到 jTable 中?