Генерация случайного числа в 2D массиве - PullRequest
1 голос
/ 29 июля 2011

Я создаю игру на линкорах, используя Java, и у меня возникают проблемы с генерацией 2 случайных чисел, которые случайным образом выбирают место на доске линкора. Например, компьютер должен случайным образом выбрать место на доске для размещения кораблей (а затем и стрелять).

Я создал двумерный массив:

int rows = 10;
int cols = 10;
char [][] grid;
grid = new char[rows][cols];

А потом попробовал несколько разных способов получить два случайных числа в массиве, но я не могу заставить его работать. Вот пример того, что я пробовал:

int randomPos = (char) (Math.random() * (grid[rows][cols] + 1));

Пожалуйста, задайте мне несколько вопросов, если это не имеет смысла.

Шон

Ответы [ 4 ]

1 голос
/ 29 июля 2011

Math.random() генерирует десятичное число. Не имеет смысла иметь квадрат 3.5779789689689... (или что-то, на что вы ссылаетесь), поэтому используйте метод Math.floor(), который округляет число внутри до ближайшего целого числа. И, как объяснил @Sanjay, генерируйте числа отдельно ...

int row = (int) Math.floor(Math.random() * rows);
int col = (int) Math.floor(Math.random() * cols);

Теперь у вас есть реальные целые числа, с которыми вы можете работать.

0 голосов
/ 29 июля 2011
int randomRow = Math.random() * grid.length;
int randomColumn = Math.random() * grid[0].length;

Я бы не использовал char в качестве типа сетки, но приведенный выше код работает одинаково независимо от типов в массиве.

0 голосов
/ 29 июля 2011

Попробуйте объявить, что это ивар:

Random random = new Random();

//In the method do this:

int randomPos = generator.nextInt(11); //This generates a number between 0 and 10.
0 голосов
/ 29 июля 2011

Создайте два случайных числа отдельно и используйте их для индексирования вашей доски.Для уточнения:

x = random(max_rows)
y = random(max_cols)
(x, y) -> random location (only if it's not already marked)

В вашем случае диапазон случайного числа должен быть между 0 и 9 (включая оба).

...