在Java中创建唯一的随机数

cry*_*one 0 java

我正在制作一个随机数(一种猜谜游戏),并提出了ff.代码生成10个一位或两位数字(1或10到40):

public void generate()
{
    for(int i=0; i<=1; i++)
    {
        for(int l=0; l<10; l++)
        {
            Random rdm=new Random();
            arr[l] = rdm.nextInt(range)+1;

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码仅回答生成10个随机一位或两位数字的需要.我需要让这个程序生成唯一的随机数.我怎样才能做到这一点?

对于后期更新感到抱歉...我想对这个程序做的是,如果数组包含重复项,那么该副本将被替换为唯一的...

==============解决================

新问题:

HashSet set=new HashSet();
Random random=new Random();

while(set.Size()<10)
{
    set.add(random.nextInt(range)+1);
}

lbtest.setText(set.toString());
bgen.setEnabled(false);
gametext.setText("");
Run Code Online (Sandbox Code Playgroud)

按照ggrigery的要求:

这里是关于ggrigery建议的更新代码.

Pet*_*rey 5

另一个选择是使用shuffle.

List<Integer> all = new ArrayList<>();
for(int i=1;i<=range;i++) all.add(i);
Collections.shuffle(all);
List<Integer> selected = all.subList(0, 10);
Run Code Online (Sandbox Code Playgroud)

如果要选择每个元素,如果要丢弃重复项,则可能需要很长时间才能找到最后一个随机值.无论选择一个还是所有元素,此方法都需要相同的时间.