从ArrayList中删除偶数

Tal*_*kir 1 java collections arraylist

我必须创建一个具有ArrayList的方法; 我需要从这个ArrayList中删除偶数.我已为此编写代码,但存在一个我无法识别的逻辑错误.

这是我的代码:

static void sortList(){

   List <Integer> number=new ArrayList <Integer>();

   number.add(11);
   number.add(45);
   number.add(12);
   number.add(32);
   number.add(36);

   System.out.println("Unsorted List: "+number);

   for (int i=0;i<number.size();i++){      
       int even=number.get(i)%2;       
        if (even==0){
            System.out.println("This is Even Number:"+ number.get(i));
            number.remove(i);
        }    
    }

    Collections.sort(number);
    System.out.println("Sorted List: "+number);

 }
Run Code Online (Sandbox Code Playgroud)

代码的输出是:

Unsorted List: [11, 45, 12, 32, 36]
This is Even Number:12
This is Even Number:36
Sorted List: [11, 32, 45]
Run Code Online (Sandbox Code Playgroud)

我想知道为什么32没有作为偶数被捕获,因为它是偶数,我通过在相同位置使用不同的偶数来测试但结果是相同的.为什么在索引(3)发生任何偶数都无法捕获.我真的很想知道为什么.所以,任何人都可以帮助我解决这个问题,还有其他更好的方法来实现这个解决方案.

谢谢

Ras*_*Kaj 8

从列表中删除某些内容后,所有内容的索引都会发生变化!

具体来说,在您的实现中,32不会被删除,因为它直接来自另一个偶数.

我会使用Iterator遍历列表,并在该迭代器上执行remove操作,如下所示:

for(Iterator i = number.iterator(); i.hasNext(); ) {
    if (isEven(i.next()) {
        i.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 5

用一个Iterator.它有一个remove()你需要的方法.

List<Integer> numbers = new ArrayList<Integer>();

numbers.add(11);
numbers.add(45);
numbers.add(12);
numbers.add(32);
numbers.add(36);

System.out.println("Unsorted List: " + numbers);

for (Iterator<Integer> iterator = numbers.iterator(); iterator.hasNext();) {
    Integer number = iterator.next();
    if (number % 2 == 0) {
        System.out.println("This is Even Number: " + number);
        iterator.remove();
    }

}

Collections.sort(numbers);
System.out.println("Sorted List: " + numbers);
Run Code Online (Sandbox Code Playgroud)