2017-05-27 10 views
1

Ich versuche, eine Matrix in Java zu machen, die nur dadurch, dass Positionen mit Zufallswerten gefüllt werden sollen, die leer sind. Ich versuche diesen Code, aber es funktioniert nicht. Ich habe zwei verschachtelte for Schleifen, eine für die Zeilen und eine für die Spalten. Und für jede Position frage ich, ob es 0 ist (ich bin nicht sicher, wie man ein Steuerelement darauf macht) und wenn es keine zufällige Koordinate erzeugt und es im Format (i, j) druckt. Aber es druckt immer 0.Füllen leere Zellen einer Matrix mit zufälligen Werten in 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; 
} 

Eine Idee, wie ich das Problem lösen kann?

Antwort

0

Der Grund, warum es immer Null Druck ist wegen Math.random() daher eine Reihe von 0.0 zu 0.9 inklusive zurück, sobald Sie das Ergebnis werfen zurück von Math.random() zu einem int, es führt immer in 0.

Lösung für Ihr Problem; Sie könnten entweder die Random Klasse verwenden und seine nextInt Methode nutzen oder die folgende Formel verwenden:

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). 

Obwohl ich die ehemaligen empfehlen würde, und Sie würden zuerst ein Random Objekt vor der äußeren Schleife dh erstellen müssen

Random randomGen = new Random(); 

dann in Ihrem, if Block, können Sie tun:

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

Es auch ist eine andere Random#nextInt Überladung, mit der Sie die Grenzen der generierten Zufallszahlen angeben können.

0

Math.radnom() gibt eine double zurück, die größer oder gleich 0.0 und weniger als 1.0 ist. Wenn Sie es in int umwandeln, wird es auf 0 abgeschnitten. Stattdessen müssen Sie eine zufällige int generieren. Außerdem sollten Sie das Gitter vor dem vollständigen Auffüllen nicht zurückgeben. ZB:

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(); 
     } 
    } 
} 
Verwandte Themen