Ошибка заполнение коллекции ArrayList методом .add
Типа крестики/нолики.
Должно происходить рандомное заполнение ячеек массива символом 'Х'. '.' - свободная ячейка. Проверяется соответствие ячейки на пустоту, если пуста, пишется 'X'. Если не пуста, делать снова. Если массив заполнен - прервать выполнение. В методе fill происходит заполнение двух массивов пустыми клетками ('.'). Метод generateRandomXO заполняет искомый массив 'Х'. Индекс заполнения берется из массива2, размер которого сокращается. Один лист является массивом индексов второго. Условие окончания цикла - нулевой размер массива индексов.
import java.util.ArrayList;
public class Dz {
public static ArrayList cells = new ArrayList<>();
public static ArrayList cells2 = new ArrayList<>();
static int size = 9;
public static void main(String[] args) {
Dz xo = new Dz();
xo.fill(cells);
xo.indexFill(cells2);
generateRandomXO();
}
private static void generateRandomXO() {
int index;
do {
index = (int) (Math.random() * (cells2.size()));
if (cells2.size() == 0) {
return;
} else if (cells.get(index).equals('X')) {
continue;
} else if (cells.get(index).equals('.')) {
cells.set(cells2.get(index), 'X');
cells2.remove(index);
System.out.println(cells);
}
} while (cells2.size() == 0);
}
void fill(ArrayList cells) {
this.cells = cells;
for (int i = 0; i < size; i++) {
cells.add('.');
}
}
void indexFill(ArrayList cells) {
this.cells = cells;
for (int i = 0; i < size; i++) {
cells.add(i);
}
}
}
Ответы (1 шт):
Объясните словами, что должен делать этот код
void fill(ArrayList cells) { //ошибка ТУТ
for (int i = 0; i < cells.size() - 1; i++) { //размер массива 0
cells.add('.'); //NullPointerException
}
}
когда в функцию передается (например, пустой) массив.
В коде, который Вы показали, не может быть NullPointerException.
А-а, NullPointerException - в generateRandomXO.
Зачем нужны статические члены класса cells и cells2 и локальные переменные с такими же именами в main?
Начнем с этого:
public static void main(String[] args) {
Dz xo = new Dz();
/*ArrayList<Character>*/ cells = new ArrayList<>(); // !!!
xo.fill(cells);
/*ArrayList<Character>*/ cells2 = new ArrayList<>(); // !!!
xo.fill(cells2);
generateRandomXO();
}