我有一个数组洗牌了一些数字我想随机化洗牌数组中的数字而没有重复使用下面的代码
int shuffled array [] = {1,3,5,7,8}
Random random = new Random();
int random =shuffled array[random.nextInt(shuffled array.length)];
我得到重复的值。
如何在没有任何重复值的情况下生成随机数?
答案 0 :(得分:2)
一般情况下,您可以执行以下操作:
Set
中,以便它们是唯一的并保持汇集它们,直到达到所需的随机数量。 编辑:
关于效率(如果你担心的话): 第一种方法使用伪随机生成器来生成唯一数字。随着总可能数量的唯一数量的增加,(例如,如果您有一个数组并希望随机拾取所有元素),那么这种方法可能是不合适的。另一方面,如果您只想选择10个唯一的随机数,那么它可能足够高效。
作为状态的shuffle
方法此方法以线性时间运行,因此在这种情况下应该首选(您的方法)。
答案 1 :(得分:0)
int pos =shuffled array[random.nextInt(4)]
int random_num_from_shuffled_array = shuffled array[pos];
答案 2 :(得分:0)
使用您的数组创建Collection
(Set
- 因为没有重复项要求)。
使用Collections.shuffle(mySet);
答案 3 :(得分:0)
您实际上正在使用Random
类和nextInt
不保证连续元素的唯一性!
我猜您需要的是Collections.shuffle
。见the documentation