假设我有一个数字/向量的数字,如1,3,7,9,那么我需要随机猜测这个列表中的数字。在Java中使用Random类似乎不可能这样做。任何人都可以帮助我指出做这种事情的方法。我必须更改用于生成随机数的数字列表。我正在尝试实施一种战略,作为任务自动发挥战舰游戏。请帮我这样做?
答案 0 :(得分:18)
如果您只想选择一个随机数,或者想要重新选择多个随机数(即允许多次选择相同数字的可能),您可以生成一个随机索引:
List<Integer> lst = ....;
int index = new Random().nextInt(lst.size());
Integer randomeValue = lst.get(index);
您也可以使用数组。每次选择都需要O(1)
。
如果您需要从列表中选择多个不同的随机数,那么使用Collections.shuffle()
并遍历列表将是一个更好的解决方案。对于所有查询,这需要O(n)
。
答案 1 :(得分:4)
将数字放在ArrayList中并使用Collections.shuffle(arrayList);
答案 2 :(得分:0)
我和 tordek 就是这个问题:不洗牌似乎是一种从源向量中选择配置数量的随机数的相当重的方法吗?
如果选择 msaeed 建议如何选择一个随机数并重复n次,是不是更快?也许将你的随机值组合成一个Set,并继续选择,直到你的设置大小足够大......(不要忘记某种检查边缘条件,其中源向量中的数字不足以提供配置的随机值数量)