2013-05-18 3 views
1

Недавно я немного поигрался с некоторыми циклами и попытался окунуться в какую-то логическую часть. Пока я нахожусь далеко за пределами уровня циклов, я все равно склоняюсь к немного странным, когда дело доходит до логики.Различные инкрементные значения для цикла

Однако, я обнаружил, что инкрементальное значение для цикла отличается в зависимости от того, являетесь ли вы внутри или вне цикла:

int i; 
for(i = 0; i < 10; i++) { 
    System.out.println(i); // 0 ... 9 
} 

System.out.println(i); // 10 

Теперь я боюсь один день я приду к точка, где мне придется использовать счетчик для чего-то большего, чем просто сопоставление с условием ...

Теперь я думаю, что понимаю, почему это происходит; i увеличивается после того, как условие терпит неудачу, и цикл умирает, но это действительно должно произойти?

Есть ли математический/логический (или элегантный) способ не заставлять его идти N + 1 после завершения цикла, что я здесь отсутствует?

ответ

4

Вот как цикл работ:

  1. проверить состояние, если он держит пойти до 2, в противном случае прекратить;
  2. техническое обслуживание;
  3. выполнить модификацию, перейдите к 1.

Так одним словом, вы не можете.

Также, как цикл может завершиться, если переменная не переходит к N + 1? В этом случае условие цикла всегда выполняется, поэтому оно будет работать вечно.

+0

Да, непременно ... Какой неуклюжий вопрос ... Извините. – Volatile

+0

@ Универсальный На самом деле это не плохой вопрос; это поможет предотвратить множество ошибок, в том числе некоторые ошибки. –

0

Так как приращение происходит после проверки, в цикле:

for(int i = 0; i < 10; i++) 

< 9 раз 10, i шагом и 9 печатается, тогда как i имеет 10 в настоящее время.

Поэтому System.out.println(i); дает 10 в качестве ответа.

Смежные вопросы