1

我正在尝试制作一个矩阵,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;
}

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

4

2 回答 2

0

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

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();
        }
     }
}
于 2017-05-27T19:26:54.897 回答
0

为什么它总是打印零的原因是因为Math.random()返回一个数字 from0.00.9inclusive 因此一旦你将返回的结果Math.random()转换为 an int它总是会导致0.

解决您的问题;您可以使用Random该类并利用其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重载使您能够指定正在生成的随机数的范围。

于 2017-05-27T19:27:02.093 回答