Как проверить нет ли пустых значений в массиве char[]?
Условно имеем массив чаров char[] grid. Нужно выполнить условие, скажем game.setGameStatus(DRAW) только в том случае, если в целом массиве не осталось пустых мест (все игроки завершили ход и все клетки заняты). Если использовать цикл for с аргументом char с != 0, то game.setGameStatus(DRAW) исполняется сразу после заполнения элемента с индексом 0.
Arrays.asList(grid).contains(null) тоже не дает правильного результата. Вот как выглядит сам цикл:
for (char c : grid) {
if (c != 0
&& game.getGameStatus() != GameStatus.X_WON
&& game.getGameStatus() != GameStatus.Y_WON) {
game.setGameStatus(GameStatus.DRAW);
}
}
Как проверить массив чтобы в нем не было null ? Проверка производится в методе makeMove, то есть после каждого хода.
Ответы (2 шт):
Надо пройти весь цикл и если там не обнаружилось нулей, то продолжать
boolean f = false;
for (char c : grid) {
if (c == 0) { f = true; break; }
}
if (!f && game.getGameStatus() != GameStatus.X_WON
&& game.getGameStatus() != GameStatus.Y_WON) {
game.setGameStatus(GameStatus.DRAW);
}
Тут несколько моментов.
Первое, это то как у вас представлены пустые поля.
char - примитивный тип, т.е. переменная такого не может иметь значение null.
А значит и пустые места не могут обозначаться с помощью null. Нужно либо использовать какой-то символ из допустимых значений char - т.е. любой unicode символ, например пробел и тогда проверка является ли поле пустым будет выражаться так: c == ' '.
Либо нужно менять тип массива на Character[]. Character в отличии от char - ссылочный тип, т.е. может быть null. Тогда null может обозначать пустую клетку и проверка будет c != null.
Теперь используя один из подходов описанных выше для обозначения пустых полей, собственно проверка, что все поля непустые:
Character[] grid = ...;
boolean existsEmptyField = false;
for (Character c : grid) {
if (c == null) {
existsEmptyField = true;
break;
}
}
if (!existsEmptyField) {
// тут мы точно знаем, что все заполнено
}