如何用Java中的随机非重复数字填充2D数组

时间:2016-04-13 21:51:06

标签: java

我很难弄清楚如何用随机数填充我的2D数组而不重复。我目前在正确的范围内提交了随机数字,但我不能想到一个非重复的解决方案。我怎么能用非常基本的java方法做到这一点?我还没有学过任何东西,比如arraylists,或类似的东西,只有非常基本的方法。

1 个答案:

答案 0 :(得分:2)

给定一个MxN整数数组,你可以使用两个for循环用1到M * N的数字填充数组,然后使用Fisher-Yates算法交换它们。

修改 我更改了算法,以便每次调用算法时它都不会创建新的整数数组。它使用一个循环,并从随机值和迭代变量l计算m,n,i j。假设给定的数组不是null,矩形并且大小至少为1x0:

public static void fillRandomlyUniqe(int[][] a) {
    /*
    fill up the array with incrementing values
    if the values should start at another value, change here
    */
    int value = 1;
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++)
            a[i][j] = value++;
    }

    // swap them using Fisher-Yates algorithm
    Random r = new Random();
    int max = a.length * a[0].length;
    for (int l = max - 1; l > 0; l--) {

        //calculate a two dimensional index from random number
        int index = r.nextInt(l + 1);
        int m = index % a.length;
        int n = index / a.length;

        //calculate two dimensional index from the iterating value
        int i = l % a.length;
        int j = l / a.length;

        int temp = a[i][j];
        a[i][j] = a[m][n];
        a[m][n] = temp;
    }
}