我在代码中遇到问题。我有一个Arraylist,我有一堆零,我需要删除。他们与其他数字混在一起,我想保留。但是,当我执行for循环时,它会跳过一些零并且不会删除它们。这是我的代码:
public static void main(String[] args) throws FileNotFoundException
{
Scanner scan = new Scanner(new File("input.txt"));
ArrayList<Double> list = new ArrayList<Double>();
while(scan.hasNextLine()){
list.add(scan.nextDouble());
}
for(int i=1; i<list.size();i+=4){
if(list.get(i)<150000){
list.set(i-1,(double) 0);
list.set(i,(double) 0);
list.set(i+1,(double) 0);
list.set(i+2,(double) 0);
}
}
for(int i=2; i<list.size();i+=4){
if(list.get(i)>22.2){
list.set(i-2,(double) 0);
list.set(i-1,(double) 0);
list.set(i,(double) 0);
list.set(i+1,(double) 0);
}
}
for(int i=3; i<list.size();i+=4){
if(list.get(i)<1100){
list.set(i-3,(double) 0);
list.set(i-2,(double) 0);
list.set(i-1,(double) 0);
list.set(i,(double) 0);
}
}
for(int i=0;i<list.size();i++){
if(list.get(i)==0){
list.remove(i);
}
}
System.out.println(list);
}
}
非常感谢任何帮助!
答案 0 :(得分:1)
在删除0时,您在结构上修改了列表。使用迭代器
while (iterator.hasNext()) {
int elem = iterator.next();
if (elem == 0)
iterator.remove();
}
希望它有所帮助。 PD:您可以使用&#34; {}&#34;直接在问题文本中包含代码。按钮
答案 1 :(得分:0)
这是你的问题:
for(int i=0;i<list.size();i++)
{
if(list.get(i)==0)
{
list.remove(i);
}
}
请注意,您可以在0
找到i=2
值。您删除索引2的项目。所有列表项目,在2项目之后将向上移动。那么,3项将成为2,4将成为3,依此类推。但是你递增i
并向下滑动(向上移动)项目。
如果找到0
值并保留其他值,则保留索引:
int i=0;
while(i<i<list.size()){
if(list.get(i)==0){
list.remove(i);
}else{
i++;
}
}