Перейти к содержанию
Fire Monkey от А до Я
  • 0

Странное поведение переменной integer


dim

Вопрос

блин, что делаю не так (под андроид)

var iio:integer;
begin
    rz:=High(CartList);// возвращает 0 хотя есть 1 запись в массиве
    for iio := 0 to rz do begin

      // цикл не выполняется так как iio=1 в отладчике

    end;
уже всю голову сломал подскажите что не так

Изменено пользователем dim
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Что такое CartList? Зачем High использовать (от слова вообще)? Что такое rz? Если for 0 to 0, то 1 раз цикл выполнится.

P.S. Почему бы на форумах не перестать считать всех телепатами?
 

Ссылка на комментарий
  • -1

High(CartList) - CartList это или Enumeration type - перечисление или массив.

В Enumeration значения идут от нуля. Т.е. TMyType = (Val1, Val2, Val3) - это по факту Byte со значениями 0, 1, 2.

High - вернет максимальный индекс из этого перечисления или массива. High(TMyType ) = 2 . Low соответсвенно вернет первый индекс - 0 или тот который идет первым (ведь массив может и не от нуля начинатся, если это указать в коде)
rz - обычная переменная integer

 

Если 0 to 0 - цикл не выполнится.

 

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
7 часов назад, Akad сказал:

Что такое CartList? Зачем High использовать (от слова вообще)? Что такое rz? Если for 0 to 0, то 1 раз цикл выполнится.

P.S. Почему бы на форумах не перестать считать всех телепатами?
 

потому что это не важно, проблема в том, что for iio := 0 to rz do begin назначает iio=1 и цикл не выполняет (rz=0 это написано)

причем если делаешь for iio := 1 to rz+1 do begin, в просмотре показывает iio=2 и цикл опять не выполняется

такое ощущение что firemonkey сошла сума

Ссылка на комментарий
  • 0

я тут соглашусь со Станиславским. не верю )

дайте код 

High - это ИНДЕКС последнего элемента массива

если в массиве 1 элемент, то индекс его равен 0

Ссылка на комментарий
  • 0

ну дык CartList - локальная переменная. не инициализирована.

её б сначала SetLength, а потом уже делать что-либо

 SetLength(CartList,1);
  if CartList<>nil then begin
    rz:=Length(CartList);
    for iio := 0 to rz-1 do begin
      Rec:=CartList[iio];
    end;
  end;

rz=1; цикл проходит 1 раз

все штатно

Ссылка на комментарий
  • 0

ну дык CartList - локальная переменная. не инициализирована.

ну я же отделил ... это значит она объявлена где то еще и там все с ней сделано

по ней как раз проблем нет, проблема в цикле.

я пока другим циклом сделал while , а там "шамана надо вызывать" хотя в других процедурах for работает штатно

Ссылка на комментарий
  • 0
8 минут назад, dim сказал:

ну дык CartList - локальная переменная. не инициализирована.

ну я же отделил ... это значит она объявлена где то еще и там все с ней сделано

по ней как раз проблем нет, проблема в цикле.

я пока другим циклом сделал while , а там "шамана надо вызывать" хотя в других процедурах for работает штатно

где может быть в другом месте инициализирована CartList  если в конкретном примере она объявлена в процедуре

Ссылка на комментарий
  • 0
24 минуты назад, krapotkin сказал:

ну так и приведите пример то. циклы не могут быть сломаны. это привело бы к полному коллапсу 

какой еще пример привести?

я и так привел пример кода всей процедуры, написал какие значения получает переменная

rz:=Length(CartList); возвращает 1

соответственно  for iio := 0 to rz-1 do begin должен быть цикл от 0 до 0 (1-1=0) но он делает цикл от 1 до 0

если я делаю for iio := 1 to rz do begin то он делает от 2 до 1

значения iio я смотрю в отладчике

я уже не знаю как описать ситуацию более понятно для Вас и отстаньте от CartList она вообще тут не причем, я так же делал и rz:=1;

Ссылка на комментарий
  • 0
20 часов назад, ENERGY сказал:

Если 0 to 0 - цикл не выполнится.

Мммм... Поспорим?

14 часов назад, dim сказал:

причем если делаешь for iio := 1 to rz+1 do begin, в просмотре показывает iio=2 и цикл опять не выполняется

Значит цикл выполняется. Просто у Rad Studio не все "ходы на мобильных платформах записаны". По крайней мере на 10.2 встречал, что крусор отладчика или прыгает взад-вперед, или пропускает небольшие блоки.

12 часов назад, dim сказал:

блииииин, еще раз говорю CartList  не имеет отношения к вопросу, вопрос касается цикла

Он есть в коде, рядом с циклом. Его длинна - это параметр цикла. Как может не иметь к нему отношения - для меня загадка.

12 часов назад, dim сказал:

если я делаю for iio := 1 to rz do begin то он делает от 2 до 1

Это реально или ваша фантазия?

12 часов назад, dim сказал:

значения iio я смотрю в отладчике

Стоит это значение смотреть в какой-то отдельной переменной. Цикловые переменные шанс корректно увидеть - это 1/2 или 2/3. 
 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...