gpt4 book ai didi

java - 链表remove()和索引不准确

转载 作者:行者123 更新时间:2023-12-01 16:42:32 24 4
gpt4 key购买 nike

我试图从链接列表中删除所选数字的所有倍数,例如删除 2 的倍数:

[0, 12, 16, 0, 13, 9, 13, 17, 5, 12, 1, 12, 5, 5, 1, 6, 14, 12, 14, 14] ->[13,9,13,17,5,1,5,5,1]

我编写这段代码是为了构造一个由 20 个随机整数组成的链表,然后根据条件从其中删除元素。

import java.util.Scanner;
import java.util.*;

public class MyList {
public static void main(String args[])
{
int entero = 0;
Random random = new Random();
LinkedList<Integer> objectList = new LinkedList<Integer>();
Scanner scan = new Scanner(System.in);
for(int i=0; i<20; i++){
int randomInteger = random.nextInt(20);
objectList.add(randomInteger);
}
System.out.print("Enter a number between 1 y 5: ");
int intNumber = scan.nextInt();
if(intNumber > 5 || intNumber < 1){
}else{
System.out.println("List : " + objectList);
if(intNumber == 2){
for(int j=0; objectList.size()>j; j++){
System.out.println("va " + objectList.get(j));
if (objectList.get(j) % 2 == 0) {
objectList.remove(objectList.get(j));;
}
}
}
}
System.out.println("Final List : " + objectList);
}
}

问题是它不会删除某些项目,即使它应该删除(例如:条件 14%2==0 被评估为 true,但数字不会被删除),因此结果如下:

从 [0, 12, 16, 0, 13, 9, 13, 17, 5, 12, 1, 12, 5, 5, 1, 6, 14, 12, 14, 14] -> 到 [0 , 13, 9, 13, 17, 5, 1, 5, 5, 1, 12, 14, 14]

为什么这没有从列表中删除所有 2 的倍数?

最佳答案

您在迭代列表元素时删除了列表元素。因此,例如,删除索引为 0 的元素后,下一次迭代将指向 objectList[1],即删除 objectList[0] 之前的 objectList[2]。调试时可以很容易地看到它。

因此,您可以创建一个要删除的元素列表,然后使用removeAll(toDelete)。

但对我来说,最好的方法是使用流 API。

objectList.stream().filter(o -> o%2!=0).collect(Collectors.toList())

将返回您所需要的内容。

更新:我刚刚发现,有一个removeIf(Predicate<? super E> filter)方法。

所以你可以简单地使用

l.removeIf(o -> o % 2 == 0);

享受;)

关于java - 链表remove()和索引不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60500559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com