2017-05-27 103 views
1

我想在Java中制作一个矩阵,该矩阵将被随机值填充,只有在那些空的位置。我正在尝试这些代码,但它不起作用。 我做了两个嵌套for循环,一个用于行,一个用于列。并且对于每个位置,我都会问这是不是0(我不确定如何对其进行控制),以及它是否不生成随机坐标并以格式(i,j)打印。 但它始终打印0用java中的随机值填充矩阵的空单元格

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; 
} 

任何关于如何解决手头问题的想法?

回答

0

的原因,为什么它总是将打印零是因为Math.random()0.00.9包容性,因此返回一个数字,一旦你把结果从Math.random()返回到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重载,它使您能够指定正在生成的随机数的范围。

0

Math.radnom()返回大于或等于0.0且小于1.0double。当你将其转换为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(); 
     } 
    } 
} 
相关问题