Узнать длину массива.
- Войдите на сайт для отправки комментариев
Ср, 23/10/2013 - 17:36
data = port.readStringUntil('\n'); data = data.substring(0 , data.length() - 1); println(data); String[] p = split(data,";"); for (i=0;i< p.length()-1 ;i++){ println(p[i]); if (p[i].substring(0,1)=="T:"){ temp = p[i].substring(2,p[i].length()); } if (p[i].substring(0,1)=="H:"){ hum = p[i].substring(2,p[i].length()); } }
Есть такой вот код. Смысл, принять с ардуинки строку, типа "T:883;H:43fe;N:64"... и так далее... затем порезать её на куски, делителем является ";". дальше всё просто, сравниваем ключ и вытаскиваем значение.
Так вот, оно ругается на строку for (i=0;i< p.length()-1 ;i++){ , а именно на p.length()... типа нельзя изменить длину масива (cannot invoke length() on the array type string). но какого чёрта? как узнать, сколько элементов в динамическом массиве?
Если не ошибаюсь, нужно писать p.length, а не p.length()
для простых массивов есть NUMITEMS(массив).
видел тут: http://forum.arduino.cc/index.php?topic=187730.15
Если не ошибаюсь, нужно писать p.length, а не p.length()
Сработало. Спасибо =)
помогите, IF не исполняется.
Если бы условие было верным, то обязательно бы выполнилось ,а значит оно неверно.
http://processing.org/reference/
http://processing.org/reference/String.html
Если бы условие было верным, то обязательно бы выполнилось ,а значит оно неверно.
http://processing.org/reference/
http://processing.org/reference/String.html
Вот и как верить этому миру, скажте мне...
if
(p[i].substring(0,1)==
"T:"
) Не срабатывает.
if (p[i].charAt(0)=='T'){ Срабатывает.
Как блин? Почему? Что за жесть?
Строка "T:54.5C"
бука "T" точно латинская и там и там....
двойнми кавычками выделяеться тип string,а еденичными кавычками тип char.
двойнми кавычками выделяеться тип string,а еденичными кавычками тип char.
Это я знаю, но я там сравниваю, типа если огрызок строки, то есть 0 и 1 символ, равны "T:", то..... или тут так не сравнивается?
Почему первый ИФ, который я ранее писал, не срабатывает?
строка и символ - разные типы данных. даже если у них одинаковое содержимое. теплое и мягкое.
ведь вы согласны с тем, что int val = 0 и char sym = '0' это две несравниваемые вещи, хотя в обоих переменных по сути ноль?
Так изначально у меня именно строка, и сравниваю со строкой. И облом.
но как только я из строки выгрызу первый символ в виде Чар-а и сравню его с другим Чар-ом - всё ок.
Не правильно это.
Как же тогда строки сравнивать?
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/14/strcmp.htm
сначала делаете так
т.е. сначала печатаете, убеждаетесь в верном выделении подстроки и её результате, а заодно и правильном содержимом исходной строки. Когда приходится резать разные строки по разным условиям, никак иначе быстро отследить правильность не получается. И вообще, не брезгуйте применять печать промежуточных данных при отладке. Особенно оно касается чтения буфера кома/файлов и т.п.
сначала делаете так
т.е. сначала печатаете, убеждаетесь в верном выделении подстроки и её результате, а заодно и правильном содержимом исходной строки. Когда приходится резать разные строки по разным условиям, никак иначе быстро отследить правильность не получается. И вообще, не брезгуйте применять печать промежуточных данных при отладке. Особенно оно касается чтения буфера кома/файлов и т.п.
так проверял. Выводит точно нужный символ или строку. Но не сравнивает
раздел string, функция equival (или как то так), удачи
-----------
добрался до компа
Class String
Name equals()
substring возвращает тип объекта String !!! Это недавно добавленный тип объекта.
а "T" - это массив символов !!! типа string !!!
потому и не бьет. Надо корректную функцию сравнения использовать.
Правильно будет такое сревнение p[i].substring(0,1).
compareTo(String(
"T"
))
Читай возвращаемые значения метода http://arduino.ru/Reference/StringCompareTo
вы точно ардуино и процессинг не путаете?
сори :) темы попутал