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)发生任何偶数都无法捕获.我真的很想知道为什么.所以,任何人都可以帮助我解决这个问题,还有其他更好的方法来实现这个解决方案.
谢谢
从列表中删除某些内容后,所有内容的索引都会发生变化!
具体来说,在您的实现中,32不会被删除,因为它直接来自另一个偶数.
我会使用Iterator遍历列表,并在该迭代器上执行remove操作,如下所示:
for(Iterator i = number.iterator(); i.hasNext(); ) {
if (isEven(i.next()) {
i.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
用一个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)
归档时间: |
|
查看次数: |
18727 次 |
最近记录: |