java - 如果语句不适用于数组中的所有对象
问题描述
我对 Java 编程很陌生,遇到了一个我认为有一个非常简单的解决方案的问题。但是我觉得我现在有隧道视野,似乎无法弄清楚问题到底是什么。所以我正在制作一个应该模拟鞋库的程序,其中一个可能的操作应该是添加新鞋 - 这部分工作得很好。有一个问题 - 在能够添加新鞋之前,应输入鞋的产品 ID,如果输入的产品 ID 与现有鞋的产品 ID 相同,则应通知用户并且无法添加具有相同产品 ID 的鞋子。我正在使用一个 if 和 if-else 语句(嵌套在一个 for 循环中,如果你这么说的话)应该通过一个包含 Shoe 类对象的数组来运行,但似乎 if 语句仅针对数组中的第一个对象运行,它按预期工作并通知用户具有相同产品 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;
我可能在某些地方没有使用正确的术语和语言,对此仍然很陌生并且每天都在学习......所以正如我上面提到的,这个解决方案适用于我数组中的第一个对象(预先添加到数组),但不适用于预先添加到数组中的其他两个对象,也不适用于通过这种情况添加的对象。此外,我确信这不是以任何方式解决此类问题的理想或最有效的方法,但这是我通过老师的学习材料和讲座得出的解决方案,并且最接近工作。
如果需要更多信息来查看导致问题的原因,或者如果某些事情解释得不好(我敢肯定是这种情况,哈哈),请告诉我,我会尽力改进。我怀疑这是一些非常基本的东西,但出了问题。
谢谢!
解决方案
你的 else 语句在循环内。这使得每次找到具有不同 ID 的产品时都会运行它。
你应该考虑创建一个单独的 contains() 方法来检查 id 是否已经存在,如果它返回 false 你可以注册新产品。boolean found = false
或者,您可以在循环之前创建一个变量for (Shoe shoe:shoeArr)
,并将其更改为true
在数组中找到 id 时。然后,您可以将第二个 if(您的 else if)移出数组,将其条件更改为 !found,并拥有一个工作程序。
boolean found=false;
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;
}
}
if (!found){
produktID = shoeExists;
System.out.println("Product-ID saved. Enter other details below \n");
推荐阅读
- c# - API 设计架构 - 反向网关?
- css - SASS:创建没有一种样式/属性的类的克隆
- nginx - Nginx infinite redirect using try_files
- javascript - How do I turn string insert data into a series for react highcharts?
- python - 运行时范围和`main`符号在函数内部或外部是不同的
- mongodb - docker容器内的mongodb身份验证
- xcode - Ionic Unexpected key "NSMainNibFile~ipad" while parsing
- reinforcement-learning - Why Q-Learning is Off-Policy Learning?
- angular - mat-slider 动态背景颜色
- python - pytorch vgg 对一张图像进行模型测试