gpt4 book ai didi

java - 从ArrayList中抓取随机对象不是随机的

转载 作者:行者123 更新时间:2023-12-01 16:39:43 25 4
gpt4 key购买 nike

我正在创建一个方法,如果您传入 Random 类型的参数,那么它将返回一个随机对象。这基本上是我想做的事情:

public T choose(Random r) {
int randomInt = r.nextInt(randomList.size()); // randomList is just a instance variable
return randomList.get(randomInt);
}

随机列表具有以下字符串:[2, 2, 2, 1, 1, 1, 1, c, c, c, a, a, a, a]

然后我用以下代码制作了一个驱动程序

 for (int i = 0; i < 10; i++) {
System.out.print(rndList.choose(rnd)); // rnd is initialized as a static Random variable
}

但是我的输出并不是随机的。我使用了调试器,发现我的 select 方法生成了一个相对较低的整数,因此它总是会打印出 2 或 1,但永远不会打印出 c 或 a。我不明白为什么会发生这种情况,非常感谢您的帮助。

编辑:问题已解决。我遗漏了很多细节,但是当我调用 size() 方法时,我重写了这个方法,它有一个错误,它返回的数字比我想要的要小。感谢 dtech 注意到我的愚蠢错误。感谢所有试图帮助我的人!

最佳答案

乍一看,代码似乎没有任何问题,因此它可能只是一个随机结果。但你的“打印并检查”方法是非常不可靠的。只需使用这样的东西:

final int N = 10000; // test 10.000 times
HashTable<Object, Integer> count = new HashTable(N);
for(int i=0;i < N;i++){
Object o = rndList.choose(rnd);
count.put(o, (count.get(o)==null?0:count.get(o))+1);
}
for(Map.Entry<Object, Integer> map : count.entrySet()){
System.out.println(String.format("%s: %d", map.getKey().toString(), map.getValue()));
}

这将平均打印如下内容:2:14291:2857编号:2143答:2857

只有当数字完全不同时您才应该担心。

还要确保使用 new Random() 构造函数,而不是 new Random(somenumber)。如果您使用后者,您每次都会得到相同的数字序列。

关于java - 从ArrayList中抓取随机对象不是随机的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211619/

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