使用基本技术生成10个随机数而不重复

-2 java arrays loops

我打算用最简单的java(数组和循环)生成无重复的随机数...但是输出结果是10个重复的数字,我无法弄清楚为什么.

这是我的代码:

int[] number = new int[10];
int count = 0;
int num;

while (count < number.length) {
    num = r.nextInt(21);
    boolean repeat = false;
    do {
        for (int i=0; i<number.length; i++) {
            if (num == number[i]) {
                repeat = true;
            } else if (num != number[i] && i == count) {
                number[count] = num;
                count++;
                repeat = true;
            }
        }
    } while (!repeat);
}

for (int j = 0; j < number.length; j++) {
    System.out.print(number[j] + " ");
}
Run Code Online (Sandbox Code Playgroud)

gon*_*nzo 8

你怎么用Set?如果您还想跟踪插入顺序,可以使用LinkedHashSet.

Random r = new Random();
Set<Integer> uniqueNumbers = new HashSet<>();
while (uniqueNumbers.size()<10){
    uniqueNumbers.add(r.nextInt(21));
}
for (Integer i : uniqueNumbers){
    System.out.print(i+" ");
}
Run Code Online (Sandbox Code Playgroud)

一个Set在Java中就像是一个ArrayArrayList只是它处理重复你.Integer如果集合中尚不存在,它将仅添加到集合中.该类Set具有与Array您可以使用的方法类似的方法.例如Set.size(),相当于Array.lengthSet.add(Integer)半等价Array[index] = value.集合不跟踪插入顺序,因此它们没有索引.一旦你了解它,它就是Java中非常强大的工具.;)

希望这可以帮助!