2017-05-27 105 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(); 
     } 
    } 
} 
相關問題