我正在嘗試在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 "";
}
令人驚歎!我是如何錯過的......這解決了我的問題和我的痛苦。 – Calihog