Почему они печатают разные результаты? - PullRequest
1 голос
/ 18 октября 2019

Я просто хочу понять разницу между for(int i =1;i<4;i++) и for(int i =1;i++<4;)
Первый печатает 123
Второй печатает 234

for(int i =1;i<4;i++)
    System.out.print(i);

for (int i =1;i++<4;)
    System.out.print(i);

Я не понимаю, почемурезультаты разные, я ожидаю, что 123 из них обоих.

Ответы [ 3 ]

1 голос
/ 18 октября 2019

Этот цикл:

for (int i =1;i++<4;)

с шагом i перед System.out.print(i), что означает, что первое напечатанное значение i будет равно 2.

0 голосов
/ 18 октября 2019

Чтобы объяснить, я реорганизовал утверждения только с помощью фигурных скобок ...

for(int i =1;i<4;i++) {
        System.out.print(i);
    }
System.out.println();
for (int i =1;i++<4;) {
        System.out.print(i);
    }
System.out.println();

Внутри первого оператора for - третье предложение с "i ++" не происходит до тех пор, пока содержимоецикла выполняется. Далее рассмотрим второй оператор for, предложение сравнения (второе предложение). это будет полностью оценено до содержимого цикла. Итак, в первой итерации «i ++» для сравнения сравнивается с «1», но сразу же увеличивается после вычисления логического предложения. Поэтому, когда он попадает в оператор print, он уже равен 2. (и так далее)Надеюсь, это поможет!

0 голосов
/ 18 октября 2019

В стандарте для цикла i увеличивается после итерации цикла. Из Java Tutorials :

Выражение приращения вызывается после каждой итерации цикла;для этого выражения вполне допустимо увеличивать или уменьшать значение.

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

...