java - 生成唯一的随机数

标签 java algorithm random

<分区>

如何生成1到9之间的9个随机数,不重复,一个接一个。就像是: 假设生成的第一个随机数是 4,那么下一个随机数必须在 [1, 9] - {4} 之间。 我的第一个方法是将每个随机生成的数字添加到一个集合中,从而避免重复。但在更糟糕的情况下,比如我们已经生成了 6 个,我们必须再生成 3 个数字,这个过程会有点慢。当范围从 [1, 9] 更改为 [1, 1000] 时,这种方法听起来不正确。 谁能提出替代方法。

最佳答案

从排序数组开始(通过 for 循环很容易创建);然后洗牌 bey 将每个数组元素与另一个(随机选择的)元素交换。 为避免评论中讨论的偏见,其他元素的索引必须等于或高于第一个元素的索引。 如果索引相等,则不交换元素。 (这个答案的原始版本包含一个关于元素被换回的可能性的句子,但是现在已经过时了,因为突出显示的修改不会再发生这种情况)

关于java - 生成唯一的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24508742/

相关文章:

Java 扩展 Map.entry() 而不使用泛型

java - 使用 O(n log n) 复杂度按值对 java HashMap 进行排序

algorithm - 如果 X ≤ p Y Y ≤ p X 可以吗?

c++ - 人口数据的生成方式

android - 在 Android 的网格中随机设置图像

postgresql - Postgres 中的快速随机行选择

java - Liferay Developer Studio 无法解析包 com.liferay.portal.upload

java - 使用 JTextFields 中的字符串填充 JTable

c++ - 可以使用 pop_back 从 vector 中删除某些值吗?

c - 数组 C 中的随机数