0

我使用以下代码生成随机数:

long randNo = Math.round(Math.random() * 10000);

我在某些情况下发现了重复项。它有可能产生相同的数字吗?

4

2 回答 2

2

是的,这是可能的。如果您需要从 0 到 9999 生成 10000 个不同的随机数。您可以生成 10000 个连续数字的列表,然后调用Collections.shuffle它。

于 2012-10-15T07:33:54.183 回答
1

对于随机数,该范围内的所有数字的可能性相同。这意味着如果您得到一个数字,则下一个值出现的可能性与第一次出现时一样。

顺便说一句:在您的示例中使用 round 不是一个好主意,因为数字 1 到 9999 的可能性相同,但数字 0 和 10000 的可能性只有一半,因为它们只出现在向下舍入的一半或向上舍入的一半上。

更有效的模式是使用

Random rand = new Random();

// as needed
int num = rand.nextInt(10000); // will be [0, 10000)

如果您需要生成唯一编号,您可以使用 Collections.shuffle

List<Integer> nums = new ArrayList<Integer>();
for(int i = 0; i < 10000; i++) nums.add(i);
Collections.shuffle(nums);

这将为您提供多达 10000 个随机顺序的唯一数字。

于 2012-10-15T07:55:04.780 回答