gpt4 book ai didi

Java collections.Shuffle 只洗牌一次

转载 作者:搜寻专家 更新时间:2023-11-01 01:45:18 24 4
gpt4 key购买 nike

我有一段代码,其想法是它接受一个包含 n 个数字的数组列表并将其随机播放 50 次,每次添加新的随机播放到另一个数组列表。

然而,它似乎只是将它洗牌一次,将它添加到数组列表中(应该如此),但在接下来的 49 次中,它并没有洗牌。它只会添加相同的一个。您可以从我下面的代码中了解更多信息:

int chromeSize;
ArrayList<GeoPoint> geoPoints = new ArrayList<GeoPoint>();
ArrayList<Integer> addToFirstChrome = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> populationShuffle = new ArrayList<ArrayList<Integer>>();

for (int i=0; i<geoPoints.size(); i++) {
addToFirstChrome.add(i);
}
System.out.println("add To First Chrome " + addToFirstChrome);

for (int j =0; j<50; j++) {
Collections.shuffle(addToFirstChrome);
populationShuffle.add(addToFirstChrome);
}

for (int p=0;p<populationShuffle.size();p++) {
System.out.println("Pop " + p +"=" + populationShuffle.get(p));
}

这是一个输出示例:

10-02 10:10:26.785: I/System.out(19648): add To First Chrome [0, 1, 2, 3, 4]
10-02 10:10:26.790: I/System.out(19648): Pop 0=[2, 1, 3, 4, 0]
10-02 10:10:26.790: I/System.out(19648): Pop 1=[2, 1, 3, 4, 0]
10-02 10:10:26.790: I/System.out(19648): Pop 2=[2, 1, 3, 4, 0]
10-02 10:10:26.790: I/System.out(19648): Pop 3=[2, 1, 3, 4, 0]
10-02 10:10:26.790: I/System.out(19648): Pop 4=[2, 1, 3, 4, 0]

如您所见,它洗牌了第一个,但不再洗牌了。我在这里遗漏了什么吗?

最佳答案

Am i missing something here?

是的。您错过了在每次迭代中添加相同引用的事实:

for(int j =0; j<50; j++) {
Collections.shuffle(addToFirstChrome);
populationShuffle.add(addToFirstChrome);
}

有效地与:

for (int j =0; j < 50; j++) {
Collections.shuffle(addToFirstChrome);
}
for (int j = 0; j < 50; j++) {
populationShuffle.add(addToFirstChrome);
}

addToFirstChrome 的值只是一个引用。

听起来您想要 50 个单独的集合,在这种情况下,您需要在每次迭代时创建一个新集合:

for (int j = 0; j < 50; j++) {
List<Integer> copy = new ArrayList<Integer>(addToFirstChrome);
Collections.shuffle(copy);
populationShuffle.add(copy);
}

(请注意,这需要您将 populationShuffle 的类型更改为 List<List<Integer>>ArrayList<List<Integer>> - 尽可能选择编程而不是接口(interface)。)

关于Java collections.Shuffle 只洗牌一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12687587/

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