迭代Java中的容器时出现令人沮丧的逻辑错误

时间:2016-11-05 20:48:29

标签: java logic containers

我正在尝试用Java制作一个简单的“药房交付”程序,但我整天都陷入了这个逻辑错误,我无法将其包裹起来。我很确定这是非常简单的事情,但我只是不理解 - 如果有人能解决这个问题,我会非常感谢你的帮助。

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

药物持有有关药物的信息(名称和价格)。 供应商持有一些其他信息,包括地图(药品,数量)。 订单包含已订购的地图和带有(供应商)的矢量。

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

现在,在我填写这两个容器之后,我有一个方法,从订单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 "";
}

1 个答案:

答案 0 :(得分:1)

您的Supplier班级有静态(因此是全局的)listOfDrugs

我认为你想拥有的是

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