2016-11-05 50 views
0

我正在嘗試在Java中製作一個簡單的「藥房交付」程序,但是我整天陷在這個邏輯錯誤中,而我無法包裝它。我很確定這是非常簡單的事情,但我只是不明白 - 如果有人能解決這個問題,真的很感謝一些幫助。總之,我有3個類 - 藥物,供應商和訂單。通過Java中的容器迭代時令人沮喪的邏輯錯誤

藥物保存有關藥物(名稱和價格)的信息。 供應商持有一些其他信息,包括帶有(藥物,數量)的地圖。 訂單包含已訂購的地圖和Vector(供應商)。

基本思想是用.txt文件填充Order類的2個容器。單行的語法如下: - Ordered_drugs_name Ordered_drugs_quantity(將這兩個放在訂單圖中)..其餘的參數類似於初始化Suppliers對象並將其放入向量中。

現在,在我填充這兩個容器後,我有一個方法需要(或者至少我認爲是)訂單中的第一個藥物Map並遍歷供應商向量,以查找是否有任何供應商有這種藥量。當然,當它開始迭代供應商時,它必須檢查當前供應商是否有藥物,因此它開始從供應商的藥物地圖迭代。

問題是,通過2個供應商和2個訂單的簡單示例,其中只有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; 
} 

和訂單類:

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

Supplier類有一個靜態的(因此全球)listOfDrugs

我想你想擁有的是

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

令人驚歎!我是如何錯過的......這解決了我的問題和我的痛苦。 – Calihog