Заполнение пустых ячеек матрицы случайными значениями в Java
Я пытаюсь сделать матрицу в 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;
}
Любая идея о том, как я могу решить проблему под рукой?
2 ответа
Причина того, почему это всегда печатает ноль, из-за Math.random()
возвращает число из 0.0
в 0.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
перегрузка, которая позволяет указывать границы генерируемых случайных чисел.
Math.radnom()
возвращает double
это больше или равно чем 0.0
и меньше чем 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();
}
}
}