Непонятный результат из небольшого кода на Java - PullRequest
0 голосов
/ 06 ноября 2018
public class Program {
    public static void main(String[] args) {
        int x = 1;
        for(; x < 6; x++) {
            x = x * x;
        }
        System.out.printf("%d", x);
    }
}

Я изучаю Java несколько месяцев. То, что я поражен, я нашел этот тип заданного вопроса в sololearn, и я доказал себя, ответ - 26. Я понимаю нормальный цикл for, как он работает, но я не понимаю такой формат.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Цикл for в Java состоит из 3 частей: инициализации, условия и запоздалой мысли, все три необязательны , что означает, что вы можете делать циклы, такие как for(;x > 10;) и for(int x = 0 ;; ++x).

например:

for(;;){
    System.out.println("test");
}

будет печатать "test" навсегда, потому что for(;;) равно while(true), так как части цикла for для for не используются beign.

В этом конкретном коде переменная x используется вне for, потому что будет напечатана после завершения цикла, если переменная объявлена ​​в части инициализации, когда цикл завершится, переменная выйдет из области видимости что приводит к нежелательным результатам.

tl; dr : цикл нормальный и имеет нормальный «формат», только не используется часть инициализации for

Проверьте традиционные циклы for в Википедии

0 голосов
/ 06 ноября 2018

Поскольку x является одновременно счетчиком цикла, который увеличивается на каждой итерации, и он также изменяется в пределах одного и того же цикла, это может быть немного запутанным для стартера.

Начиная со значения 1, вы идете в цикл, так как 1 < 6, вы возведите в квадрат 1 * 1 = 1, затем следующую итерацию цикла, где вы получите x++, таким образом 1 + 1 = 2, снова квадрат, 2 * 2 = 4, снова x++, 4 + 1 = 5, снова в квадрате 5 * 5 = 25.

Тогда вводит в заблуждение, насколько я понимаю, вы не понимаете, почему мы получили финальный x++. Итерация, когда x стала 25, была, когда мы вошли с x = 5, то есть < 6, затем после выполнения оператора в цикле вы затем делаете увеличение / уменьшение для следующей итерации, а именно 25 + 1 = 26, и только после этого мы покидаем цикл и получаем ваш загадочный результат!

Проверьте следующее изображение и добавьте к нему код, используя ручку, а затем отладчик. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...