2017-05-27 4 views
1

Javaに行列を作成しようとしていますが、それは空の位置だけでランダムな値で埋められます。私はこれらのコードを試していますが、うまくいきません。 2つのネストされたループを作成しました.1つは行用、もう1つは列用です。そして、すべてのポジションについて、私はそれが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

理由番号を含め、あなたが結果をキャストしたらintMath.random()から返され、それは常に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.0より小さい等しいdoubleを返します。 intにキャストすると、0に切り捨てられます。代わりに、ランダムintを生成する必要があります。また、完全に塗りつぶす前にグリッドを返さないでください。例:したがって、0.0から0.9に、それは常にゼロを印刷していますが理由Math.random()リターンのある理由として

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(); 
     } 
    } 
} 
関連する問題