删除ArrayList中的特定数字

时间:2016-02-08 07:00:15

标签: java arraylist

我在代码中遇到问题。我有一个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);
 }
}

非常感谢任何帮助!

2 个答案:

答案 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++;
    }
}