基本上,我有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)+" ");
}
答案 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.");
}
}