Как проверить нет ли пустых значений в массиве 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 , то есть после каждого хода.
Отслеживать
9,103 4 4 золотых знака 20 20 серебряных знаков 28 28 бронзовых знаков
задан 14 янв 2021 в 20:38
33 4 4 бронзовых знака
2 ответа 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)
Отслеживать
ответ дан 14 янв 2021 в 21:50
9,103 4 4 золотых знака 20 20 серебряных знаков 28 28 бронзовых знаков
Тут несколько моментов.
Первое, это то как у вас представлены пустые поля.
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) < // тут мы точно знаем, что все заполнено >
C: Массивы
Тема массивов в С довольно обширна. В этом уроке мы познакомимся с базовыми концепциями работы с массивами.
Задание
Допишите функцию int sum(int *arr, length) , которая принимает массив и его размер и возвращает сумму элементов массива.
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Как проверить пустой ли массив?
Массивы в чистом Си не могут быть «пустыми», поскольку память под них выделяется в соответствии с размерностью таковых.
Илья, Вы сначала определитесь сами, что именно для вас будет «пустым» массивом.
Стандартные статические и динамические массивы, как написал выше poige не могут быть пустыми. Они всегда имеют размер >0. И да же если вы не инициализируете элементы массива, в них все равно будут какие-то значения (мусор).
Стандартный подход — если длина массива 0, значит массив пустой.
Вы можете, например, в программе считать, что значение 0 — это отсутствие элемента и в коде проверять это. Тогда проверка на «пустоту» массива своидтся просто к проверке всех значений на равенство 0. Если хоть один элемент не 0 — массив не пустой. Значение 0 я взял произвольно, вы можете брать любое другое, в зависимости от типа данных хранящегося в массиве. Или еще хуже — сделать массив структур, одно поле структуры отводите под признак — пустая структура или нет.
Решения вопроса 2
AnT @TheCalligrapher
В языке С в принципе не бывает «пустых» массивов. Разве что динамически выделенная под массив память может иметь размер 0 или flexible array member в структуре может соответствовать массиву размера 0.
Поэтому не ясно, о чем вы вообще ведете речь.
В любом случае, передавать в такую функцию правильный размер массива — ваша задача.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Не ИТ-специалист
//. i = 0; tmp = 0; while (i < len) < if (tab[i] >tmp) tmp = tab[i]; i++; > //.
(Массив пустой, если его длина len равна 0.)
Ответ написан более трёх лет назад
Pinkman @famousman204 Автор вопроса
нет, допустим я отправлю вот такой массив
int arr[10]; max(arr, 10);
то в таком случае я должен получить 0. Но не понимаю как это сделать.
Илья, это не пустой массив, а не инициализированный.
Илья, в Си невозможно отличить не инициализированную переменную от инициализированной (по крайней мере, типа int), — какой нибудь мусор в ней будет находится, — это не скриптовый язык, в котором как в JavaScript, есть особое значение особого типа undefined . Поэтому, если вам надо, явно инициализируйте массивы нулями.
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Windows
- +1 ещё
Почему из-за cfgmgr32 exe стал больше на 32 мб?
- 2 подписчика
- 27 апр.
- 130 просмотров
Как проверить пустой ли массив c
В Javascript очень часто приходиться работать с массивами. Одна из проверок, с которой приходится часто встречаться – это проверка на то пустой ли массив или в нем есть какие-то элементы.
Когда вы вручную создаете массив, то там эту проверку производить совершенно не обязательно, там сразу все очевидно.
Другое дело, когда массив формируется автоматически при выполнении каких-либо условий. Например, вы получаете данные из базы данных и нужно проверить нашлось ли что-либо при таких условиях, либо таких записей в базе данных нет.
Если ничего найдено не было, то будет возвращаться пустой массив. Эту ситуацию нужно отследить и делать соответствующие действия.
Давайте посмотрим на упрощенном примере, как это работает.
Итак, предположим, что у нас есть два массива с данными:
var dataFull = [3,5,7]; var dataEmpty = [];
dataFull – это массив, который содержит в себе элементы
dataEmpty – это пустой массив.
Задача в том, чтобы программно проверить пустой ли каждый из этих массивов или нет и вывести соответствующее сообщение.
Для проверки на то есть-ли какие-либо элементы в массиве, можно использовать свойство length.
data.length
Возвращаясь к задаче, которую мы поставили, решение может выглядеть вот так:
var dataFull = [3,5,7]; var dataEmpty = []; if (dataFull.length == 0) else if (dataEmpty.length == 0) else
Чтобы посмотреть, как это работает, можете перейти по следующей ссылке:
На этом все. Надеюсь, что в будущем с подобными проверками у вас больше возникать трудностей не будет.
Все мои уроки по Javascript здесь.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Как проверить массив на пустоту?
Оказалось это не работает.
С ARRAY[0]= работает. Но стоит пявиться ARRAY[1]= и всё.
Как же проверить за один раз, пустой ли массив?
Столько скриптов переписано, а этого не знаю, вернее, был уверен, что знаю, а оказалось вон оно как.
Должно же быть какое-то элементарное решение.
teod0r ★★★★★
02.09.21 20:51:00 MSK
[ $ -eq 0 ]
$ — возвращает длину массива
anonymous
( 02.09.21 21:16:24 MSK )
еще $ преобразует массив в строку, тогда возможно -z сработает.
anonymous
( 02.09.21 21:18:34 MSK )
Ответ на: комментарий от anonymous 02.09.21 21:16:24 MSK
Мне не количество элементов узнать нужно, а проверить, что все элементы пустые, т.е. что они ARRAY[0]= ARRAY[1]= ARRAY[2]= . , а не ARRAY[0]=iuy4tv8q ARRAY[1]=’ ‘ ARRAY[2]=1
teod0r ★★★★★
( 02.09.21 21:20:29 MSK ) автор топика
Ответ на: комментарий от anonymous 02.09.21 21:18:34 MSK
тоже не работает
teod0r ★★★★★
( 02.09.21 21:20:54 MSK ) автор топика
Ответ на: комментарий от teod0r 02.09.21 21:20:29 MSK
IFS='' -z "$"
Только IFS нужно сохранять/восстанавливать или sub-shell.
А вобще, пустой массив и массив из пустых элементов это разные вещи.
mky ★★★★★
( 02.09.21 21:31:31 MSK )
Ответ на: комментарий от teod0r 02.09.21 21:20:54 MSK
Я поигрался, вроде работает:
IFS=»; ARRAY[0]= ARRAY[1]=aaa ARRAY[2]=»; echo «$»; echo; [ -z «$» ]; echo $?
anonymous
( 02.09.21 21:44:00 MSK )
Ответ на: комментарий от mky 02.09.21 21:31:31 MSK
работает, но какое-то не очевидное решение
teod0r ★★★★★
( 02.09.21 21:53:44 MSK ) автор топика
Ответ на: комментарий от teod0r 02.09.21 21:53:44 MSK
Это чисто теоретический вопрос или практический?
Если практический, и если откуда-то сверху нет требования делать именно шелл-скриптами, рекомендую посмотреть в сторону чего-то более развитого, хотя бы питон/пхп, ибо шелл-скрипт с такой логикой ты даже если и напишешь то будет сложноподдерживаемым.
firkax ★★★★★
( 02.09.21 22:15:37 MSK )
Столько скриптов переписано, а этого не знаю, вернее, был уверен, что знаю, а оказалось вон оно как.
Это и есть главная проблема помойки под названием bash (и другие shеллов тоже касается по большей части). На этом невозможно нормально программировать, нет нормального синтаксиса, куча edge кейсов, старое легаси, да и язык построен так, чтобы интерпретатору было удобно, а не человеку
Использовать какие-то структуры данных на баше это боль, и как только они появляются в коде, проще сразу все переписать все на питон. Единственный плюс баша это возможность быстро строить пайплайны и вызывать экзешники, без всякой сторонней мишуры как в том же пайтоне.
Не, можно конечно постичь все тонкости, знать все подводные камни, но один вопрос: зачем на это тратить свое время?
Fizzika ★★
( 02.09.21 22:35:36 MSK )
Ответ на: комментарий от Fizzika 02.09.21 22:35:36 MSK
Использовать какие-то структуры данных на баше это боль, и как только они появляются в коде, проще сразу все переписать все на питон. Единственный плюс баша это возможность быстро строить пайплайны и вызывать экзешники, без всякой сторонней мишуры как в том же пайтоне.
И тут врывается xonsh:
def func(): a = sys.argv[1] git clone @(a)
Классы С++ (массив с проверкой на пустоту)
добрый день! Прошу помощи. ТребуетсЯ создать массив, с определенным количеством элементов. Слева в массив входят элементы, справа выходят. Реализовать проверку на пустоту.
Элементы вводятся с клавиатуры. При попытке извлечения пустого элемента, вывести сообщение об ошибке, но продолжить выполнение программы.
Я знаю что элементы можно добавлять и извлекать. Так же знаю что нужно количество элементов.
4 ответа
26 мая 2011 года
889 / / 29.05.2009
Слева в массив входят элементы, справа выходят.
а где у массивов лево и параво?
что уже есть? с какими трудностями столкнулся?
27 мая 2011 года
889 / / 29.05.2009
class array
char arr[100];
int max, current;
int is_empty();
public:
array()
array(int size);
~array()<>;
int add(char sym);
char get();
>;
array::array(int size)
if (size>100 || size
int array::is_empty()
if (current==0) return 1;
else return 0;
>
int array::add(char sym)
if (current==max)
cout return 1;
>
else
arr[current]=sym;
current++;
return 0;
>
>
27 мая 2011 года
1.7K / / 26.01.2011
Массив типа «очередь» (FIFO)
template class myqueue
;
record ( ) ;
T val ;
record * next ;
> ;
record * first ;
record * last ;
public :
myqueue ( )
;
bool isEmpty ( ) //проверка на пустоту
;
void push ( T element ) //добавление в конец списка
else
next = newelement ;
last = newelement ;
>
> ;
T pop ( ) //выборка из начала списка
val ;
record * newfirst = first — > next ;
delete first ;
first = newfirst ;
>
return ret ;
> ;
> ;
Как проверить пустой ли массив java
Для проверки пустоты массива можно использовать свойство length , которое возвращает количество элементов в массиве. Если длина массива равна нулю, значит, массив пуст.
int[] arr = new int[i]; if (arr.length == 0) System.out.println("Массив пуст"); > else System.out.println("Массив не пуст"); >
В данном примере создается пустой массив и проверяется его длина. Если длина равна нулю, то выводится сообщение «Массив пуст».