从 ArrayList 中移除随机索引

4

我有一个包含4个元素的ArrayList。我需要随机删除一个元素并显示更新后的ArrayList。然而,我的随机数总是指向ArrayList的第二个和第三个元素。据我所知,我的随机数应该按照这样的顺序计数:0 1 2 3。这不足以覆盖我的4个元素吗?为什么它总是指向相同的索引?我已经尝试增加随机数(4)+1,但那会使我超出范围。

Random rand = new Random();
Scanner input = new Scanner(System.in);
int numberOfGuests = 4;
ArrayList<String> guestList = new ArrayList<>(4); 
System.out.println("Enter 4 guests:");

for(int i = 1; i <=numberOfGuests; i++){
    System.out.printf("guest%d: ", i);
    guestList.add(input.nextLine());
}
System.out.println("Guest List: " + guestList);
String remove = guestList.remove(rand.nextInt(4)); 
System.out.printf("%s can't come%n" , remove);   
System.out.println("Guest List: " + guestList);

你的代码在IntelliJ本地复制后可以直接运行。 - Tim Biegeleisen
1
你的代码对我有效。我已经在Coderpad上使用了4个预定义的guests a、b、c和d运行了你的代码。我正在运行它10次,你可以看到它是有效的。链接在这里:https://coderpad.io/FPNDM4CD - cullan
1
你知道吗,伙计们,是我不好。我必须运行它超过15次才能获取所有的值,因为随机数恰好在我最初的5次运行中选择了相同的元素。 - mrKapplan
1
不用担心,你发布的代码完全是功能齐备、深思熟虑的。正如你所看到的,还没有人对它进行了负面评价。你可以直接删除它。 - Tim Biegeleisen
谢谢你运行它,我注意到你把它变成了一个静态方法,并使用for循环在主函数中运行了10次,为什么我没想到呢。我一直手动运行并比较结果,真是太傻了。 - mrKapplan
显示剩余2条评论
1个回答

0

当你使用随机数生成器时,请注意范围设置为数组长度减一,就像在你的情况下一样。

String remove = guestList.remove(rand.nextInt(3)); 

nextInt(n) 已经检查了从 0n 的范围,不包括 n。所以你的答案只会检查索引 0 - 2,这是不正确的。顺便说一下,楼主已经说他的代码按预期工作了。 - QBrute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接