用 java 中的随机值填充矩阵的空单元格

Filling empty cells of a matrix with random values in java

我正在尝试在 Java 中创建一个矩阵,该矩阵将仅在空的位置填充随机值。我正在尝试这些代码,但它不起作用。 我制作了两个嵌套的 for 循环,一个用于行,一个用于列。对于每个位置,我询问它是否是 0(我不确定如何对其进行控制)以及它是否不生成随机坐标并以 (i,j) 格式打印。 但是一直在打印0.

public int[][] getRandomPosition(int matrixlength) {
       int[][] grid = new int[matrixlength][matrixlength];

       for (int i = 0; i < grid.length; i++) {
          for (int j = 0; j < grid[i].length; j++) {
             if (grid[i][j] == 0) {
                grid[i][j] = (int) Math.random();
                System.out.print(grid[i][j]);
                return grid;
             }
          }
       }
       return null;
}

知道如何解决手头的问题吗?

Math.radnom() return 大于或等于 0.0 且小于 1.0double。当您将其转换为 int 时,它将被截断为 0。相反,您需要生成随机 int。此外,您不应该 return 网格完全填满之前。例如:

Random rand = new Random();
for (int i = 0; i < grid.length; i++) {
    for (int j = 0; j < grid[i].length; j++) {
        if (grid[i][j] == 0) {
            grid[i][j] = rand.nextInt();
        }
     }
}

为什么它总是打印零的原因是因为 Math.random() returns 一个从 0.00.9 的数字,因此一旦你转换返回的结果Math.random()int 它总是会导致 0

解决您的问题;您可以使用 Random class 并利用其 nextInt 方法或使用以下公式:

grid[i][j] = (int)(Math.random() * (max - min) + min); // where min is the minimum value you want to generate and max is the max you want to generate (exclusive).

虽然我推荐前者,但您首先需要在外循环之前创建一个 Random 对象,即

Random randomGen = new Random();

然后在您的 if 块中,您可以:

grid[i][j] = randomGen.nextInt();

还有另一个 Random#nextInt 重载,可让您指定生成的随机数的范围。