如何从给定的数字列表中用Java生成一个随机数

问题描述:

假设我有一个像1,3,7,9这样的数组的数组/向量,那么我需要从这个列表中随机猜出一个数字。在Java中使用Random类似乎不可能做到这一点。任何人都可以帮助我说出做这种事的方法。我必须更改用于生成随机数字的数字列表。我正试图实施一项战略,自动将战舰游戏作为一项任务。请帮助我做到这一点?如何从给定的数字列表中用Java生成一个随机数

把号码一个ArrayList和使用Collections.shuffle(arrayList);

+5

为什么O(1)满足O(1)就足够了? – Tordek 2009-08-08 03:57:17

+0

但在我的情况下,我需要一次多个点击。通常战列舰游戏一个接一个地点击,这里它在游戏初始化时可以改变 – 2009-08-08 07:22:55

如果你只是想只能选择一个随机数,或想重返选择多个随机数(即允许选择相同数量的多次的可能性),就可以生成一个随机指数:

List<Integer> lst = ....; 
int index = new Random().nextInt(lst.size()); 
Integer randomeValue = lst.get(index); 

您可以使用数组,而不是为好。这需要每个选择O(1)

如果您需要从列表中选择多个不同的随机数,然后使用Collections.shuffle()并遍历列表将是一个更好的解决方案。对于所有查询,这需要O(n)

+0

谢谢你的回应。这非常有用 – 2009-08-08 07:24:02

+1

如果您需要多个随机数,请记住重复使用相同的随机实例,而不是每次都新建一个。 – 2009-08-08 17:38:11

我与tordek关于这一个:不洗牌似乎是一个相当重的方式来从源矢量中选择配置数量的随机数字?

对于如何挑选一个随机数然后再重复n次,难道不会更快地采取msaeed的建议吗?也许组装你的随机值,并继续选择,直到你的设置的大小足够大...(不要忘记某些检查边缘条件,其中源矢量中没有足够的数字来提供配置的数字随机值