Что мы хотим сделать, это сгенерировать массив всех возможных точек и выбрать одну из этих точек в случайном порядке. Мы используем цикл for для итерации по всем точкам массива 3x3 и добавляем действительные в наш временный массив, а затем выбираем случайный индекс и размещаем там X.
String[] list = new String[9]; // maximum 9 points
int size = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(position[i][j] == ' ') {
list[size] = "" + i + j;
size++;
}
}
}
int index = (int) (Math.random() * (size+1));
position[Integer.parseInt(list[index].charAt(0))][Integer.parseInt(list[index].charAt(1))] = 'X';
В качестве альтернативы, вместо того чтобы хранить х, у координаты точки в String
мы могли бы хранить их в java.awt.Point
так:
Point[] list = new Point[9]; // maximum 9 points
int size = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(position[i][j] == ' ') {
list[size] = new Point(i, j);
size++;
}
}
}
int index = (int) (Math.random() * (size+1));
position[list[index].getX()][list[index].getY()] = 'X';
Как вы можете видеть, код с помощью Точка практически такая же, но вместо того, чтобы анализировать координаты из строки, мы можем просто получить к ней доступ непосредственно из класса.
Вы также должны проверить, чтобы остались какие-то элементы, проверяя, равен ли размер 0 после цикла for. Если это так, вы должны, вероятно, вернуть -1 (что делает ваш существующий код). В противном случае в конце всего кода возвращается 0.
Почему вы «возвращаете 0» при замене позиции? – Maroun
@MarounMaroun Примечание: Я предполагаю, что это то, что означает OP: было бы лучше, если бы он вернул «истину» и «ложь». Когда X помещен, он хочет, чтобы метод сообщил ему. – Justin