Непонимание приращения префикса - PullRequest
0 голосов
/ 16 января 2019

Я не понимаю, как работает этот метод. Я запускаю метод recur, и результат начинается с 98, увеличивается, и я не могу понять, что происходит позже. Результат, который я ожидал:

a=98
a=99
a=99
a=100
a=100
a=101

Но фактический результат:

a=98
a=99
a=100
a=101
a=100
a=99

Я нашел это упражнение на местном форуме по тестированию Java. Поэтому любые объяснения были бы полезны для меня.

public  class Test  {

    public static void main(String[] args) {
        recur(98);
    }
    public static void recur(int a) {
        if (a <= 100) {
            System.out.println("a=" + a);
            recur(++a);
            System.out.println("a=" + a);
        }
    }

1 Ответ

0 голосов
/ 16 января 2019
recur(98)
    print "a=98"
    recur(99)
        print "a=99"
        recur(100)
            print "a=100"
            recur(101)
                do nothing
            print "a=101" // that's the value of a in recur(100) after being incremented once
        print "a=100" // that's the value of a in recur(99) after being incremented once
    print "a=99" // that's the value of a in recur(98) after being incremented once

Что вам может не хватать, так это то, что a является локальной переменной, что означает, что каждое выполнение recur() имеет свою собственную копию этой переменной, и изменение значения в одном выполнении не влияет на значение локальной переменной. переменная других казней.

...