条件语句/循环错误:if和else两个元素都没有达到?

use*_*215 1 java arraylist

控制台输出基本上,我有3个arraylists:项目,频率和uniqueitems.项目包含所有元素列表,例如:面包,黄油,果酱,黄油,牛奶,果酱.Uniqueitems包含独特的东西,例如:面包,黄油,果酱,牛奶.频率包含它们在项目中出现的次数,按唯一项目的顺序排列,例如:1,2,2,1.

但是我的一些元素不会出现if or else(Jam,见附图).一些元素,尽管如果进入if,不会从我的arraylist中删除(colddrink).听起来很傻,真的.但自从昨晚以来我一直在经历这个问题.Netbeans IDE.在我的代码上也使用在线编译器.它给出了与我的IDE相同的答案.那么,我的错误到底是什么?(附加输出)

int min_sup=2;
int v;

for (i=0;i<frequency.size();i++)
{
    System.out.println(uniqueitems.get(i)+ " = "+ frequency.get(i));

}

for(i=0;i<frequency.size();i++)
{
      v=frequency.get(i);
      if(v<min_sup)
      {
          uniqueitems.remove(i);
          frequency.remove(i);
          System.out.println(uniqueitems.get(i)+ " is inside if.");
      }
      else
      {
          System.out.println(uniqueitems.get(i)+ " is not in if.");
      }  
}
System.out.println("\n\n");
for(i=0;i<uniqueitems.size();i++)
{
      System.out.print(uniqueitems.get(i)+" ");  
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

当您调用时frequency.remove(i),列表中的前一个i+1元素将frequency成为新i的第th个元素,这意味着循环的下一次迭代将跳过该元素,因为i在每次迭代中都会递增.

每当删除元素时,您可以通过递减i来处理它:

for(i=0;i<frequency.size();i++)
{
      v=frequency.get(i);
      if(v<min_sup)
      {
          uniqueitems.remove(i);
          frequency.remove(i);
          System.out.println(uniqueitems.get(i)+ " is inside if.");
          i--;
      }
      else
      {
          System.out.println(uniqueitems.get(i)+ " is not in if.");
      }  
}
Run Code Online (Sandbox Code Playgroud)