我有一个产品“Snacks”的ArrayList,它正在从一个文件中读取并存储在这个ArrayList中,显示它们的CODES,NAMES,PRICES。 使用此代码,命名为selectProduct()方法:
public void selectProduct() {
loadProducts();
System.out.println("Insert product code");
Scanner keyboard = new Scanner(System.in);
for(Snack s : arraysnack){
if(keyboard.next().equals(s.code))
System.out.println("Product found");
else
System.out.println("Product NOT found");
break;
}
他们从“loadProducts”方法正确填充了ArrayList,但是当我尝试给出代码输入时,如果它遵循存储的元素的顺序,则它会正确打印,否则它会跳过,当我到达时,foreach循环会自动断开最后的产品。 例如,数组填充如下(代码,名称,价格)
PATA1 san carlo 0.4
PATA2 chipsters 0.35
KIND1 kinder 0.75
KIND2 kinder 0.5
KIND3 hippo 0.25
MARS1 mars 0.8
如果我按顺序键入代码,它会给出正确的输出(但总是在6次迭代后结束),但是如果我跳过第一次,则只有当我输入第二个时,输出才会给出“产品查找”... 我想要一个“产品查找”输出,如果我打印存储在arraylist中的6个代码之一,如果订单不被遵守,我想迭代超过6次(因为只有6个产品)。
答案 0 :(得分:0)
您只需使用list.contains()
而不是按顺序遍历arraylist。
答案 1 :(得分:0)
for(Snack s : arraysnack){
if(keyboard.next().equals(s.code))
在每次迭代中,您从键盘请求新输入。这是错的!你应该在循环之前获得输入。
boolean isFound = false;
String userCode = keypord.next();
for(Snack s : arraysnack){
if(userCode.equals(s.code)){ // <- Especially for beginners, I recommend ALWAYS use brackets!
System.out.println("Product found");
isFound = true;
break; // Break here! It has been found.
}
//else
// Here you only know that it isn't the current product!
// System.out.println("Product NOT found");
// break; <- this break would have been outside if/else !!
}
if( !isFound ) System.out.println("Product NOT found");
旁注:括号 - 使用它们!
这:
if(keyboard.next().equals(s.code))
System.out.println("Product found");
else
System.out.println("Product NOT found");
break;
相当于:
if(keyboard.next().equals(s.code)){
System.out.println("Product found");
}else{
System.out.println("Product NOT found");
}
break;
所以break
总会发生 - 无论条件是什么结果。
答案 2 :(得分:0)
使用.nextLine()而不是next()来确保扫描程序通过换行符分隔符对输入数据进行分块。另外,你在if语句中没有使用括号,然后在else后面跟着两行代码。如果你不使用括号,只有&#34; else&#34;之后的行。将成为else-block的一部分。此行之后的所有内容都将独立于if语句运行 - 这就是为什么它会中断。 此外,您可能每次迭代只需要一个输入。
Scanner keyboard = new Scanner(System.in);
String input = keyboard.nextLine();
for(Snack s : arraysnack){
if(input.equals(s.code)){
System.out.println("Product found");
} else {
System.out.println("Product NOT found");
break;
}
}