【发布时间】: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