矩阵上随机元素的java集值
我想生成一个8乘8的矩阵。矩阵的每个元素都需要有一个值1,除了每列上的一个元素被设置为0之外,该元素是通过在0-7之间生成一个随机整数来选择的
运行代码时得到的结果:
1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1
1 1 0 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 0 0 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1
我的矩阵应该如下所示:
1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 1 1 1 0 1 0
0 1 1 1 1 1 1 1
1 1 1 0 1 1 0 1
1 0 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
代码
for (int[] row: grid)
Arrays.fill(row, 1);
for (int i=0; i<grid.length; i++) {
int j = getRandom();
grid[i][j] = 0;
}
// print matrix
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++)
System.out.format("%2s%2d%2s", " ", Main.grid[i][j], " ");
System.out.println();
}
# 1 楼答案
首先,让我们将矩阵全部设为1:
然后,根据您的问题,您似乎希望每列的唯一行具有零。所以只需洗牌您的列索引:
这将分散随机0,使其在每行(和每列)都是唯一的,并且实际上不涉及任何RNG,因此它是O(n)
# 2 楼答案
首先,使用数组。填充api,它将使您的代码更加干净简洁
然后,对于每一行,随机选取一个列号并插入“0”,从而替换1
# 3 楼答案
在嵌套循环中,单元格的初始化和置零都在最内层循环中。这将导致这两个函数在每个单元格中运行一次,但在每个列中只执行一次调零操作
如果我们将单元格的初始化顺序从一行一行改为一列一列,我们可以将调零逻辑移到最外层的循环