搜索项目的数组列表,然后打印出

时间:2015-08-27 14:42:26

标签: java for-loop arraylist break

我一直在进行一项总结如下的练习:

  

使用继承和多态写一个程序来存储单个数组中食物的详细信息。例如,比萨饼的细节(商品编号,尺寸,基数),软饮料(......)......

我已经建模了所有东西,创建了我的基类和派生类。

一切正常,除了一件事:当用户选择删除项目时,如果找不到项目编号,我应该输出字符串“Not found”。我的数组列表将每个食物项目对象(子类)作为元素。这是我从数组中删除项目的代码:

System.out.println("Enter the menu item number");
String num = input.next();

for(int j=0; j<menuItems.size();j++)    //menuItems is my arraylist
    { if((menuItems.get(j).getItemNumber().equals(num)))  //getItemNumber is a method in the derived class
      menuItems.remove(j);
    }
 System.out.println("Done");
 break; //for the switch statement

如果在数组列表中找不到该项,我应该输出“Not found”而不是“Done”。我最初的尝试如下:

if(!menuItems.get(j).getItemNumber().contains(num))
    System.out.println("Not found");
else
    //the code above

这不起作用,因为它在for循环中,if语句甚至会在项目被删除后检查数组列表。因此,它仍将评估为true

有人可以帮帮我吗?

更新:
我解决了以下问题

           int found=0; // element not found found =0 else 1

              for(j=0; j<menuItems.size();j++)
              {

                 if((menuItems.get(j).getItemNumber().equals(num)))
                 {
                     menuItems.remove(j);
                     System.out.println("Done");
                     found+=1;
                 }

              }
             if (found ==0)
                {
                  System.out.println("Not found");
                }

           break;  //for the switch statement

3 个答案:

答案 0 :(得分:1)

你可以这样做

boolean found = false;

for(int j=0; j<menuItems.size();j++){ 
    if((menuItems.get(j).getItemNumber().equals(num))){
        menuItems.remove(j);
        found = true;
        break;
      }
    }

if(found){
    System.out.println("Done");
} else {
    System.out.println("Not found");
}

如果您没有设法删除该项目,那么它就不存在了。

答案 1 :(得分:0)

如果找到并删除该元素,请断开开关(plates只是一个随机标签):

plates: switch (smth) { //whatever you use here (not provided in the post)
...
  for(int j=0; j<menuItems.size();j++) {   //menuItems is my arraylist     
    if(menuItems.get(j).getItemNumber().equals(num)) {  //getItemNumber is a method in the derived class
      menuItems.remove(j);        
      System.out.println("Done!");
      break plates; //for the switch statement
    }      
  }      
  System.out.println("Not found!");      
  break; //for the switch statement (that you did not provide)
  ...
} //end of switch (if num is found, you continue from here)

答案 2 :(得分:-1)

我想也许您可以查看HashMap,然后您可以编写代码:

  HashMap<String, Food> = new Hashmap<>();

    String num = input.next();
    final Food temp = MyMap.get(num)

    if(temp == null)
    {
       //not found
    }
    else
    {
       //found
    }