随机生成的唯一整数的 Java 数组

标签 java arrays

public static int[] uniqueRandomElements (int size) {

    int[] a = new int[size];

    for (int i = 0; i < size; i++) {
        a[i] = (int)(Math.random()*10);

        for (int j = 0; j < i; j++) {
            if (a[i] == a[j]) {
                a[j] = (int)(Math.random()*10);
            }
        }   
    }

    for (int i = 0; i < a.length; i++) {
        System.out.print(a[i]+" ");
    }
    System.out.println();
    return a;
}

我上面有一个方法应该生成用户指定的随机元素数组。随机生成的整数应介于 0 和 10 之间(含)。我能够生成随机整数,但我遇到的问题是检查唯一性。我在上面的代码中尝试检查唯一性,但数组仍然包含重复的整数。我做错了什么,有人可以给我提示吗?

最佳答案

for (int i = 0; i < size; i++) {
    a[i] = (int)(Math.random()*10);

    for (int j = 0; j < i; j++) {
        if (a[i] == a[j]) {
            a[j] = (int)(Math.random()*10); //What's this! Another random number!
        }
    }   
}

您确实找到了重复值。但是,您将其替换为另一个可能重复的随机数。相反,试试这个:

for (int i = 0; i < size; i++) {
    a[i] = (int)(Math.random()*10);//note, this generates numbers from [0,9]

    for (int j = 0; j < i; j++) {
        if (a[i] == a[j]) {
            i--; //if a[i] is a duplicate of a[j], then run the outer loop on i again
            break;
        }
    }  
}

但是,这种方法效率很低。我建议列一个数字列表,然后将其随机化:

ArrayList<Integer> a = new ArrayList<>(11);
for (int i = 0; i <= 10; i++){ //to generate from 0-10 inclusive. 
                               //For 0-9 inclusive, remove the = on the <=
    a.add(i);
}
Collections.shuffle(a);
a = a.sublist(0,4);
//turn into array

或者你可以这样做:

ArrayList<Integer> list = new ArrayList<>(11);
for (int i = 0; i <= 10; i++){
    list.add(i);
}
int[] a = new int[size];
for (int count = 0; count < size; count++){
    a[count] = list.remove((int)(Math.random() * list.size()));
}

关于随机生成的唯一整数的 Java 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20039025/

相关文章:

javascript - 阵列没有看到新的更新

javascript - 查找数组中的特定字符

java - 调用具有简单返回的函数与仅进行检查有区别吗?

java - 使用 vector 数组创建矩阵数组的简单方法

java - 计算 servlet 内的相对路径?

java - 使用抽象类的ArrayList

java - 卡夫卡流无法在 Spark 作业中工作

java - 牌组中找到的最高值(value)的卡牌

java - Android stackoverflow 使用 while 循环

javascript - 创建一个保留 for 循环的全局函数