仅使用数组生成不重复的随机数

Zac*_*lor 2 java

我想X用从0到的随机整数填充一个大小的数组,X没有重复。问题是我必须只使用数组来存储 的集合int,而不是ArrayLists。我该如何实施?

我不明白为什么我似乎无法得到这个。但这是我最近的一段代码,它填充了列表但允许重复。

System.out.print("Zero up to but excluding ");
int limit = scanner.nextInt();

// create index the size of the limit
int [] index = new int[limit];

for(int fill=0;fill<limit;fill+=1){
    index[fill] = (limit);
}

int randomNumber = 0;
Random rand = new Random();
int [] randoms = new int[limit];
boolean flag = true;

// CODE TO NOT PRINT DOUBLES
for (int z=0;z<limit;z+=1){
    randomNumber = rand.nextInt(limit);
    int i=0;
    while (i<limit){
        if (index[i] == randomNumber){
            flag = true;
        }
        else {
            flag = false;
            break;
        }
        i+=1;
    }
    if (flag == false){
        randoms[z] = randomNumber;
        index[z] = randomNumber;
    }
}
System.out.println("Randoms: "+java.util.Arrays.toString(randoms));
Run Code Online (Sandbox Code Playgroud)

CMP*_*MPS 6

这是一种方法:

  1. 创建一个长度为 N 的数组
  2. 从 0 填充到 N-1
  3. 运行 for 循环并随机交换 2 个索引

代码:

// Step 1
int N = 10;
int[] array = new int[N];

// Step 2
for(int i=0; i < N; i++)
   array[i] = i;

// Step 3
for(int i=0; i < N; i++) {
   int randIndex = (int) (Math.random() * N);
   int tmp = array[i];
   array[i] = array[randIndex];
   array[randIndex] = tmp;
}
Run Code Online (Sandbox Code Playgroud)