在java中,将不重复的随机数添加到2D数组的最简单方法



我正试图找出最简单的加法方法来填充这个2D数组,只使用不重复的数字。

我尝试过使用一个带有布尔值的方法在添加值之前检查它,如果它已经存在,但我无法使其工作。

int[][] x = new int[R][C];
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < x[i].length; j++) {
double z = (Math.random() * ((30 * (j + 1)) - ((30 * j) + 1)) + 1 + ((30 * j) + 1));
card[i][j] = (int) z;
}
}

我要说的最好的方法是使用Set数据结构

int row = 2;
int col = 2;
Set<Set<Integer>> rowSet = new HashSet<>();
for (int i = 0; rowSet.size() < row; i++) {
Set<Integer> colSet = new HashSet<>(); 
for (int j = 0; colSet.size() < col; j++) {
double x = (Math.random() * ((15 * (j + 1)) - ((15 * j) + 1)) + 1 + ((15 * j) + 1));
colSet.add((int) x);
}
rowSet.add(colSet);
}

并最终将其转换为阵列

int[][] arr = set.stream()
.map(i->i.stream()
.mapToInt(Integer::intValue)
.toArray())
.toArray(int[][]::new);

您肯定希望使用Random.nextInt()来获得int的均匀分布。很可能您想要一个Set来跟踪已经生成的数字。

int[][] cards = new int[ROW][COL];
Random r = new Random();
Set<Integer> generated = new HashSet<>();
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
int n;
do {
n = r.nextInt();
} while (generated.contains(n));
generated.add(n);
cards[i][j] = n;
}
}

最新更新