Я пытаюсь создать матрицу в 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;
}

Любая идея о том, как я могу решить проблему под рукой?

1
jasmin 27 Май 2017 в 22:19

2 ответа

Лучший ответ

Причина, по которой он всегда печатает ноль, заключается в том, что Math.random() возвращает число от 0.0 до 0.9 включительно, поэтому после преобразования результата, возвращенного из Math.random(), в {{ X4}}, это всегда приведет к 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();

Также есть еще один {{X0} } Перегрузка, которая позволяет указывать границы генерируемых случайных чисел.

0
Ousmane D. 27 Май 2017 в 19:46

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();
        }
     }
}
0
Mureinik 27 Май 2017 в 19:26