Java 在数组列表中搜索项目,然后打印出内容

Java 在数组列表中搜索项目,然后打印出内容,java,for-loop,arraylist,break,Java,For Loop,Arraylist,Break,我一直在做一个总结如下的练习: if(!menuItems.get(j).getItemNumber().contains(num)) System.out.println("Not found"); else //the code above 编写一个程序,使用继承和多态性在单个数组中存储食物项目的详细信息。例如,比萨饼的详细信息(项目编号、大小、基数)、软饮料(…) 我已经对一切进行了建模,创建了基类和派生类 除了一件事之外,一切都正常:当用户选择删除一个项目时,如果没有找

我一直在做一个总结如下的练习:

if(!menuItems.get(j).getItemNumber().contains(num))
    System.out.println("Not found");
else
    //the code above
编写一个程序,使用继承和多态性在单个数组中存储食物项目的详细信息。例如,比萨饼的详细信息(项目编号、大小、基数)、软饮料(…)

我已经对一切进行了建模,创建了基类和派生类

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

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
这不起作用,因为它位于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
int-found=0;//未找到元素=0,否则为1

对于(j=0;j你可以这样做

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");
}
boolean-found=false;

对于(int j=0;j如果发现并移除该元件,请断开开关(
只是一个随机标签):

plates:switch(smth){//无论您在这里使用什么(未在帖子中提供)
...

对于(int j=0;j我想也许你可以看看,然后你可以像这样编写你的代码:

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

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

    if(temp == null)
    {
       //not found
    }
    else
    {
       //found
    }
HashMap=newhashmap();
String num=input.next();
最终食物温度=MyMap.get(num)
if(temp==null)
{
//找不到
}
其他的
{
//发现
}

menuItems包含什么类型?getItemNumber返回什么?menuItems包含一个类类型-Food。getItemNumber返回一个字符串@Vefthym。您可以发布整个switch语句吗?请修复缩进问题您的解决方案不应该与建议的答案不同。但是,既然它对您有效,请检查我们的建议的原因没有,只是为了您更好地理解。使用您的代码,我收到一条错误消息:无法访问statement@John我猜是因为switch语句,你的帖子中没有提供。看起来有人不喜欢“find”布尔解决方案,我们可能永远也不知道原因。@vefthym谢谢你的努力。但这仍然不起作用。它打印出“Done”即使项目不在列表中list@John好的,那么,打印
num
menuItems.get(j).getItemNumber()而不是“完成!”
用于调试。它们是相等的,因此您要么添加不希望添加的元素,要么将
num
更改为不希望添加的值。这意味着代码中的其他地方有错误。这不起作用。我正在获得“完成”输出即使该项不在ArrayListy中,您也需要通过代码进行调试,以确定在这种情况下的错误。found初始化为“false”,因此它将只打印“Done”如果某项设置为真。唯一可以将其设置为真的是从列表中删除某项。我使用类似的方法解决了此问题。请参阅我编辑的文章,了解我是如何解决此问题的。感谢您的帮助。您知道其他替代方法吗?当然,我也可以使用您的ArrayList。但是,您为什么不使用最适合的dat程序中的一种结构。如果每个“ItemNumber”都是唯一的,那么最好使用具有顺序和唯一条目的数据结构。
  HashMap<String, Food> = new Hashmap<>();

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

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