Foreach循环仅用于存储在ArrayList中的元素

时间:2017-01-20 11:18:05

标签: java arraylist foreach

我有一个产品“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个产品)。

3 个答案:

答案 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;
    }
}