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