【问题标题】:Frustrating logical error while iterating through containers in Java在 Java 中迭代容器时出现令人沮丧的逻辑错误
【发布时间】:2016-11-05 20:48:29
【问题描述】:

我正在尝试用 Java 制作一个简单的“药房递送”程序,但我整天都被这个逻辑错误困住了,我无法解决它。我很确定这是非常简单的事情,但我就是不明白 - 如果有人能解决这个问题,我会非常感谢一些帮助。

总而言之,我有 3 个类 - 药物、供应商和订单。

Drug 包含有关药物的信息(名称和价格)。 供应商持有一些其他信息,包括带有(药物,数量)的地图。 Order 包含一个带有有序的 Map 和带有 (Suppliers) 的 Vector。

基本思想是用 .txt 文件填充 Order 类的 2 个容器。单行的语法如下: - Ordered_drugs_name Ordered_drugs_quantity(将这两个放在订单地图中).. 其余的都是类似的参数,用于初始化 Suppliers 对象并将其放入向量中。

现在,在我装满这 2 个容器后,我有一个方法可以(或者至少我认为它可以)从订单 Map 中获取第一种药物,并遍历供应商向量以查找是否有任何供应商拥有这种药物的数量。当然,当它开始迭代供应商时,它必须检查当前供应商是否有药物,所以它从供应商的药物地图开始迭代他有。

问题在于,以 2 个供应商和 2 个订单的简单示例为例,其中 1 个供应商仅销售 1 个药品并且他有所需的数量,我收到两个供应商以打印出来(甚至连这种药都不卖)。

这是一些代码,很抱歉发了这么长的帖子。 :(

public class Supplier {
//some private members goes here 

private static Map <Drug, Integer> listOfDrugs = new HashMap <Drug, Integer>();

Supplier(String n, String rep, String repPhoneNum, String drugName, double drugPrice, int stock) {
    this.supplierName = n;
    this.representative = rep;
    this.representativesPhoneNumber = repPhoneNum;
    listOfDrugs.put(new Drug(drugName, drugPrice), stock);
}

public boolean isDrugInStock(Drug drug, int quantity) {
    int stock;
    for (Entry<Drug, Integer> entry : listOfDrugs.entrySet())
    {   
     if(entry.getKey().getDrugsName().equalsIgnoreCase(drug.getDrugsName())) {
        stock = (int) listOfDrugs.get(entry.getKey());
        if(stock >= quantity) {
                return true;
            }
     }
    }
    return false;
}

还有 Orders 类:

public class Orders {
    private Map <Drug, Integer> orderedDrugs = new HashMap <Drug, Integer>();
    private Vector<Supplier> suppliers = new Vector <Supplier>();

Orders(String fileName) throws IOException {
  //the reading form a .txt file goes here
}

public String order() {
    for (Entry<Drug, Integer> entry : orderedDrugs.entrySet()) {
        int quantity = orderedDrugs.get(entry.getKey());
        for(Supplier s : suppliers) {

                if(s.isDrugInStock(entry.getKey(), quantity)) {
                    System.out.println(s.toString());
                }
            }
        }
    return "";
}

【问题讨论】:

    标签: java logic containers


    【解决方案1】:

    您的 Supplier 类有一个静态的(因此是全局的)listOfDrugs

    我想你想要的是

    public class Supplier {
        //some private members goes here 
        private Map <Drug, Integer> listOfDrugs = new HashMap <Drug, Integer>();
        ...
    }
    

    【讨论】:

    • 太棒了!我怎么会错过...这解决了我的问题和痛苦。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 2011-04-03
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    相关资源
    最近更新 更多