我对java编程非常陌生,遇到了一个问题,我认为这个问题有一个非常简单的解决方案。然而,我觉得我现在有隧道的眼光,似乎不能明白问题到底是什么。所以我要做一个程序来模拟一个鞋类仓库,其中一个可能的操作应该是添加一个新鞋-这部分工作得很好。在添加新鞋之前,需要输入鞋的产品id,如果输入的产品id等于现有鞋的产品id,应该通知用户这一点,并且不能添加具有相同产品id的鞋。我正在使用if和if else语句(嵌套在for循环中,如果你这么说的话),该语句应该在包含鞋类对象的数组中运行,但似乎if语句只对数组中的第一个对象运行,如果它按预期工作,并通知用户具有相同产品id的鞋已经存在,但是如果您在数组中输入第二个或第三个对象的产品id,程序将允许该产品id通过,而不会“阻止”用户添加它,尽管具有该产品id的鞋已经存在于数组中。所以我的问题是这里出了什么问题-是不是我的代码格式有问题,打字错误,或者类似的问题?
具体情况代码:
System.out.println("Check to see if the product already exists "
+ "through entering product ID ");
shoeExists = scanObj.next();
//shoeArr is the array for Shoe object
for (Shoe shoe:shoeArr) {
if (shoe != null && (shoe.getProdukt().equalsIgnoreCase(shoeExists))) {
System.out.println("A shoe with product ID "+shoeExists+" already exists");
System.out.println(" ");
break;
}
else if (shoe != null && !shoe.getProdukt().equalsIgnoreCase(shoeExists)){
produktID = shoeExists;
System.out.println("Product-ID saved. Enter other details below \n");
System.out.println(" ");
System.out.println("Product-ID: "+produktID);
System.out.println("Brand: ");
brand = scanObj.next();
System.out.println("Name: ");
name = scanObj.next();
System.out.println("Model: ");
model = scanObj.next();
System.out.println("Shoe type: ");
shoeT = scanObj.next();
System.out.println("Shoe size: ");
shoeSize = scanObj.nextInt();
System.out.println("Price: ");
price = scanObj.nextInt();
System.out.println("Stock: ");
stock = scanObj.nextInt();
Shoe b_obj = new Sko(produktID, brand, name, model,
shoeT, shoeSize, price, stock);
if (counter < 20) {
shoeArr[counter] = b_obj;
counter++;
System.out.println("Shoe with product ID "+produktID+ " added");
break;
}
else {
counter = skoArr.length-1;
System.out.println("There is no room to add shoe.");
}
}
}
break;
我可能还没有使用正确的术语和语言在一些地方,仍然是新的这一点和学习的一天。。。正如我上面提到的,这个解决方案适用于数组中的第一个对象(即预添加到数组中的对象),但不适用于预添加到数组中的其他两个对象,也不适用于通过这种情况添加的对象。我也确信这不是解决这类问题的最理想或最有效的方法,但这是我通过学习材料和老师的讲课找到的解决方法,并且离工作最近。
如果需要更多的信息来了解是什么导致了问题,或者如果有些事情解释得不好(我确信是这样的lol),请告诉我,我会尽我所能来改进。我怀疑是一些非常基本的东西出了问题。
谢谢!
1条答案
按热度按时间nfzehxib1#
你的else语句在循环中。这使得它在每次找到具有不同id的产品时都会运行。
您应该考虑创建一个单独的contains()方法来检查id是否已经存在,如果它返回false,您可以注册新产品。或者,您可以创建
boolean found = false
就在你的for (Shoe shoe:shoeArr)
循环,并将其更改为true
当您在数组中找到id时。然后你可以把第二个if(你的else if)移出数组,把它的条件改为!找到了,并且有一个工作程序。