Вопрос Конструкция Java: i++ и ++i в циклах for

Регистрация
30 Сен 2013
Сообщения
88
Репутация
14
Спасибо
0
Монет
0
Циклы

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

System.out.println(i);



И циклы

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

System.out.println(i);



Ничем не отличаются по поведению. Почему бы в первом сначала не увеличивать i на 1 а потом продолжать или начинать цикл? Это было бы полезной языковой конструкцией.

По вашему мнению, почему во многих языках программирования не предусмотрено такое?
 
Потому что в ЯП "С" ( и аналогичных по синтаксису ) никто не мешает вообще использовать любые конструкции для "последнего" оператора цикла

Например
for(n=12345;n;n/=10)arr[n%10]++;
Заполняет массив количеством цифр в числе

Для данного варианта цикла тоже будем придумывать дополнительный способ записи?
 
Потому, что в большинстве C-style языков (к коим относится Java) не существует полноценного цикла со счётчиком и на месте ++i может стоять абсолютно любое выражение. Фактически, for - лишь синтаксический сахар для while.

В Algol-style языках нормальный цикл со счётчиком существует и там в for задаются 3 выражения: начальное значение, конечное значение и шаг приращения переменной:
for i := 1 to 35 by 4 do
задаёт цикл от 1 до 35 с шагом 4

В Python цикла со счётчиком тоже нет - там for используется для исключительно для итерации по элементам коллекции. Но там есть генератор, выдающий последовательность значений с заданным шагом, который можно использовать для имитации цикла со счётчиком:
for i in range(1, 36, 4):
 
Потому что вы не понимаете последовательность интрукций в цикле
Цикл начинается ровно с того числа, которое указано в инициализации
Префиксный или постфиксный инкремент на это влиять не может
 
Назад
Сверху