从特定数组中随机化数字而不重复

时间:2014-07-18 06:46:09

标签: java

我有一个数组洗牌了一些数字我想随机化洗牌数组中的数字而没有重复使用下面的代码

int shuffled array [] = {1,3,5,7,8}
Random random = new Random();
int random =shuffled array[random.nextInt(shuffled array.length)];

我得到重复的值。

如何在没有任何重复值的情况下生成随机数?

4 个答案:

答案 0 :(得分:2)

一般情况下,您可以执行以下操作:

  • 创建随机数并将它们保存在Set中,以便它们是唯一的并保持汇集它们,直到达到所需的随机数量。
  • 如果您有一个想要汇集数字的池,您可以创建一个数组(就像您一样)然后随机播放该数组。为什么这个解决方案对你不起作用?我认为你正在混合2解决方案并获得重复。

编辑:

关于效率(如果你担心的话): 第一种方法使用伪随机生成器来生成唯一数字。随着总可能数量的唯一数量的增加,(例如,如果您有一个数组并希望随机拾取所有元素),那么这种方法可能是不合适的。另一方面,如果您只想选择10个唯一的随机数,那么它可能足够高效。

作为状态的shuffle方法此方法以线性时间运行,因此在这种情况下应该首选(您的方法)。

答案 1 :(得分:0)

int pos =shuffled array[random.nextInt(4)]
int random_num_from_shuffled_array =  shuffled array[pos];

答案 2 :(得分:0)

使用您的数组创建CollectionSet - 因为没有重复项要求)。 使用Collections.shuffle(mySet);

答案 3 :(得分:0)

您实际上正在使用Random类和nextInt 保证连续元素的唯一性!

我猜您需要的是Collections.shuffle。见the documentation