gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:17:25 25 4
gpt4 key购买 nike

我正在尝试用 Java 制作一个简单的“药品配送”程序,但是我一整天都被这个逻辑错误困住了,我就是无法解决它。我很确定这是非常简单的事情,但我只是不明白 - 如果有人可以解决这个问题,我将非常感谢一些帮助。

总而言之,我有 3 个类别 - 药品、供应商和订单。

药物保存有关药物的信息(名称和价格)。供应商持有一些其他信息,包括带有(药品、数量)的 map 。Order 包含一个带有 ordered 的 Map 和带有(供应商)的 Vector。

基本思想是用 .txt 文件填充 Order 类的 2 个容器。单行的语法如下:- Ordered_drugs_name Ordered_drugs_quantity(将这 2 个放入订单映射中).. 其余的参数是类似的参数,用于初始化供应商对象并将其放入 vector 中。

现在,在我装满这两个容器后,我有一个方法,它从订单映射中获取(或者至少我认为它确实)第一种药物,并迭代供应商 vector 以查找是否有任何供应商拥有这种药物的数量。当然,当它开始迭代供应商时,它必须检查当前供应商是否有该药品,因此它从该供应商拥有的药品 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>();
...
}

关于java - 在 Java 中迭代容器时出现令人沮丧的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40443051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com