簡體   English   中英

遍歷Java中的容器時令人沮喪的邏輯錯誤

[英]Frustrating logical error while iterating through containers in Java

我正在嘗試用Java編寫一個簡單的“葯房送貨”程序,但是我整天都陷在這個邏輯錯誤上,而我卻無法將其包裝起來。 我敢肯定這很簡單,但我只是不明白-如果有人可以解決此問題,我將不勝感激。

總而言之,我有3類-葯品,供應商和訂單。

毒品持有有關毒品的信息(名稱和價格)。 供應商還擁有其他信息,包括帶有(葯品,數量)的地圖。 Order擁有一個帶有order的Map和Vector帶有(Suppliers)的Vector。

基本思想是用.txt文件填充Order類的2個容器。 單行的語法如下:-Ordered_drugs_name Ordered_drugs_quantity(將這2個放入訂單圖)..其余類似的參數用於初始化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 "";
}

您的Supplier類具有靜態(因此是全局) listOfDrugs

我想你想擁有的是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM