仅使用不带ArrayList的Random写入没有重复的随机数

时间:2019-07-14 02:53:03

标签: java arrays loops random numbers

我有一个问题要写更多的关于随机数的清晰程序而不必重复。我的代码有效,但效果不是很好。

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

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个数字不会重复此数字,但是如何写起来容易

2 个答案:

答案 0 :(得分:0)

我试图解决您的问题
第一种方式:

        Integer[] arr = new Integer[13];
        int i = 0;
        for (;;) {
            if (i == 13) {
                break;
            }
            int random = (int) (Math.random() * 100);

            if (!Arrays.asList(arr).contains(random)) {
                arr[i] = random;
                i++;
            }
        }

第二种方式:

  List<Integer> list = new ArrayList<>(); 
     while (list.size()<13) {  
        Integer random = (int )(Math.random() * 100);
        if(!list.contains(random)){
            list.add(random);
        }
    }

答案 1 :(得分:0)

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

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

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