путаница по поводу цикла - PullRequest
0 голосов
/ 06 февраля 2012
for(int i=0;i<10;i++) { 
    System.out.println(i);
}

В этом простом цикле for мы инициализируем i нулем и увеличиваем его при каждом повороте. Но если мы уже увеличили i, почему мой вывод начинается с 0. Разве это не должно быть 0? Есть еще один признак того, что

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

Они оба для петли, но почему выходы разные?

Ответы [ 7 ]

13 голосов
/ 06 февраля 2012

Возможно, потому что

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

эквивалентно:

for(int i=0;i<10;) { 
    System.out.println(i);
    i++;
}
4 голосов
/ 06 февраля 2012

В:

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

i++ выполняется после каждой итерации, а не до.

Другими словами, этот цикл эквивалентен:

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

Обратите внимание, что i++ происходит после println() и не раньше.

2 голосов
/ 06 февраля 2012

Внешний вид цикла for выглядит следующим образом:

for (initializer; condition; increment)
    statements;

Он выполняется так:

initializer;
while (condition)
{
   statements
   increment
}

Таким образом, приращение происходит только ПОСЛЕ выполнения statements,

1 голос
/ 06 февраля 2012

Причина, по которой он начинается с единицы в вашем коде, заключается в том, что вы указываете его приращение, прежде чем использовать: System.out.println (i);

0 голосов
/ 06 февраля 2012

Первый for аргумент является инициализацией;он оценивает один раз перед каждой всей операцией.Второй аргумент - это условие.Он выполняется ДО каждого отдельного цикла, и цикл продолжается ТОЛЬКО, если это правда.Третий аргумент for - это итерация, которая оценивает цикл ПОСЛЕ КАЖДОГО, включая последний.

Последнее правило позволяет помещать циклы в цепочку.Затем вы должны удалить int определение из for и определить переменную цикла где-то снаружи.

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

0 голосов
/ 06 февраля 2012

в первом i ++ выполняется в конце цикла.То есть после завершения цикла цикла.Такие, как компилятор, добавляют i ++ в конец тела цикла.Поэтому изначально значение i равно 0 и увеличивается в конце цикла.Во втором случае вы увеличиваете его вручную в начале цикла

0 голосов
/ 06 февраля 2012

Выходные данные отличаются, потому что шаг итерации цикла for (третье поле) происходит после выполнения кода.

Это эквивалентно первому оператору цикла for:

for(int i=0;i<10;) { 
    System.out.println(i);
    i++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...