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

时间:2015-04-17 11:44:53

标签: java arraylist

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

但我的一些元素不会进入if或者其他(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)+" ");  
}

1 个答案:

答案 0 :(得分:6)

当您致电frequency.remove(i)时,i+1列表中的上一个frequency第三个元素将成为新的i第三个元素,这意味着循环的下一次迭代将跳过该元素,因为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.");
      }  
}