Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中生成一组唯一的随机数_Java - Fatal编程技术网

在Java中生成一组唯一的随机数

在Java中生成一组唯一的随机数,java,Java,我想在0-500范围内创建10个随机数。但问题是我希望这些数字是唯一的。对于2个随机数,我可以创建如下内容: int randomItem1 = r.nextInt(500); int randomItem2 = r.nextInt(500); while(randomItem1==randomItem2){ randomItem1=randomItem(); randomItem2=randomItem(); } 但如果我这样做10年,我想它会堆积起来。我这么说是因为我正在尝

我想在0-500范围内创建10个随机数。但问题是我希望这些数字是唯一的。对于2个随机数,我可以创建如下内容:

int randomItem1 = r.nextInt(500);
int randomItem2 = r.nextInt(500);
while(randomItem1==randomItem2){
    randomItem1=randomItem();
    randomItem2=randomItem();
}

但如果我这样做10年,我想它会堆积起来。我这么说是因为我正在尝试创建一个巨大的算法,它试图进行连续的计算,我想连续地取10个随机的唯一的数字。我不知道该怎么办。有什么想法或建议吗?

看起来您正在将它们存储在各个变量中。存储这样的项目组的“正常”位置通常是在列表或数组中

在这种情况下,将它们存储在“set”数据结构中。它不允许重复

集合文档:

Set Set=newhashset();
while(set.size()<10){
增加(r.nextInt(500));
}

对1-500之间的数字制作一个
链接列表
,每次使用一个数字时,将其中的一个从中洗牌


这将为每个提取的数字提供可靠的sane(恒定时间)性能。

我将使用一个数组,并将生成的数字存储到该数组中。您将生成一个新的随机数,然后需要在数组中迭代到您的数字计数,检查它是否与您以前创建的任何数组匹配。

Java Collections有一个shuffle方法。您可以将数字放入ArrayList,然后洗牌其内容。如果ArrayList包含n个数字,则调用shuffle方法将得到相同的ArrayList,该ArrayList包含n个数字,但随机排列

for(int i=0;i<10;i++){
list.add(i);  // list contains: [0,1,2,3,4,5,6,7,8,9]
}
Collections.shuffle(list);// list now contains: [0, 9, 3, 1, 5, 8, 7, 2, 6, 4]

for(int i=0;我先用谷歌搜索一下,但那是一个糟糕的网站,答案是错误的。@MichaelT对此表示怀疑。另一个想要一个范围内的数字,而这个想要多个范围内的数字。@DennisMeng显然我在做dup(打开窗口等)时出错了。我实际上是在尝试做这个(就是这样),忘了清理这个。谢谢你提醒我。这可能是一个整洁的解决方案,再加上一个糟糕的设计。不确定的CPU需求。前面的回答更为切题:创建一组符合条件的数字源,“洗牌”然后迭代生成的随机列表。对于这个解决方案,我觉得主要的问题是编写更多的代码,而不是使用现成的数据结构。因为您不会使用现成的数据结构,例如集合,所以您将花费更多的时间编写和调试代码。根据您的应用程序,我不确定考虑到OP只需要10个随机数,我不确定我会如此担心CPU的需要。然而,许多现成的“set”数据结构也将使用您上面建议的O(n^2)算法更有效的设计。
for(int i=0;i<10;i++){
list.add(i);  // list contains: [0,1,2,3,4,5,6,7,8,9]
}
Collections.shuffle(list);// list now contains: [0, 9, 3, 1, 5, 8, 7, 2, 6, 4]