Заполнение пустых ячеек матрицы случайными значениями в 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();
        }
     }
}
Другие вопросы по тегам