Ява. Почему этот цикл for не работает правильно

У меня есть следующий заголовок цикла:

for ( int row = interval[intRow][_START_]; row <= interval[intRow][_END_]; row++ )

где interval имеет тип/размерность int[15][5], intRow имеет значение 1, а _START_ и _END_ являются константами, начиная с 0 и заканчивая 1;

interval[intRow][_START_] возвращает 1, а interval[intRow][_END_] возвращает 2

Какого черта row идет только до 1 (так что только один цикл вместо 2)?

Я заметил, что если я поставлю второе условие, или как оно там называется, между двумя ( ... ), тогда оно сработает, цикл будет выполнен дважды. Я имею в виду:

for ( int row = interval[intRow][_START_]; row <= (interval[intRow][_END_]); row++ )

У кого-нибудь есть идеи, почему это происходит? Я знаю, что могу просто поместить их между двумя скобками, но я хотел бы знать, почему это не работает.

Спасибо.

ИЗМЕНИТЬ1

Это <=, а не <... Я в начале сделал опечатку. Извиняюсь.

ИЗМЕНИТЬ2

В основном это будет выглядеть так:

for ( int row = interval[1][0]; row <= interval[1][1]; row++ )

где interval[1][0] == 1 и interval[1][1] == 2


person AndreiBogdan    schedule 15.03.2012    source источник
comment
Что внутри interval[1][0]; и interval[1][1]; ?   -  person DonCallisto    schedule 15.03.2012
comment
значения 1 и 2 соответственно   -  person AndreiBogdan    schedule 15.03.2012
comment
Ты уверен? Вы можете их распечатать?   -  person DonCallisto    schedule 15.03.2012
comment
Боюсь, что так... использую Watch для проверки переменных в режиме отладки... и они показывают правильно :( :D Тут с ума сходят.   -  person AndreiBogdan    schedule 15.03.2012


Ответы (3)


Пробовал след.

int[][] interval = new int [15][5];

int intRow = 1;
int _START_ = 0;
int _END_ = 1;

interval[intRow][_START_] = 1;
interval[intRow][_END_] = 2;

for ( int row = interval[intRow][_START_]; row <= interval[intRow][_END_]; row++ ) {

    System.out.println(row);
}

Выход: 1 2

Подводя итог, у меня все работает нормально. Что заставляет меня задаться вопросом, правильно ли установлен interval[intRow][_END_].

Попробуйте использовать отладчик или просто Sysouts для отладки вашей программы.

person sgp15    schedule 15.03.2012
comment
Я .. и именно поэтому я запутался :) хе-хе ... тогда я могу что-то упустить ... но я не могу понять, что. Значения в Watch кажутся правильными, они ДОЛЖНЫ перейти к следующему циклу, но это не так. Кроме того, если я поставлю его между `(...)' - person AndreiBogdan; 15.03.2012
comment
Не могу думать ни о какой другой причине. Вероятно, вставьте сюда вывод java -version. - person sgp15; 15.03.2012
comment
если это ... я просто поставлю это между скобками ... спасибо за тестирование: D, это заслуживает принятия :) лол - person AndreiBogdan; 15.03.2012
comment
Не могли бы вы предоставить информацию о вашей версии в любом случае? Вы используете Sun Java? - person sgp15; 15.03.2012

Петля 1: 1‹2 — в порядке Петля 2: 2‹2 — не в порядке

Попробуйте ‹=

person Thomas    schedule 15.03.2012
comment
ха-ха, извините, это ‹= .. я просто ошибся при наборе :) извините - person AndreiBogdan; 15.03.2012
comment
Другими словами, управляющая переменная увеличивается после выполнения цикла, а оценка происходит до следующей итерации цикла. От первого раза до 1‹2 происходит приращение, 2‹2 ложно, и цикл не выполняется во второй раз. - person gorjusborg; 15.03.2012

Вы пробовали это написать?

for ( int row = interval[intRow][_START_]; row <= interval[intRow][_END_]; row++ )

или это ?

for ( int row = interval[intRow][_START_]; row < interval[intRow][_END_] +1; row++ )
person Joand    schedule 15.03.2012