首页 > 解决方案 > 仅使用不带 ArrayList 的 Random 写入不重复的随机数

问题描述

我在为随机数编写更清晰的程序而不重复时遇到了问题。我的代码有效,但不是很好。

我尝试了很多想法,尤其是我只是玩循环

for(int i=1; i<=pole.length;i++){

   while(p<=13){
     i=rd.nextInt(13)+1;
     if(pole[i]==i){    
     }
     else{
        System.out.println`(i+"-"+p);
        pole[i]=i;
        p++;
        if(i>Max){
          Max=i;
        }
    }
  i=Max;
}

我希望有 13 个数字而不重复这个数字,但是如何更容易地编写它

标签: javaarraysloopsrandomnumbers

解决方案


如果出于某种原因您不想使用 Collections.shuffle(),您也可以使用 Set 实现相同的目的。

  Set<Integer> set = new LinkedHashSet<>();
  while (set.size() < 13)
    set.add((int) (Math.random() * 101));

请记住,您还必须检查随机数范围是否远大于设置的大小(在上面的示例中,您需要确保 101 始终大于所需的唯一数字的数量,即 13,否则您最终会进入一个非常长/无限的while循环)


推荐阅读