Я не могу продолжить с задачей - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в Java и мне нужна твоя помощь с домашней работой.Вот задача:

class F {
    private static int x = 0;
    public static int funcB(int z){
        return ++x + z;
    }

    public static int func(int x) {
        x = x + 2;
        x = funcB(x);
        return x++;
    }
}
class Main {
    public static void main(String[] args) {
        int z = 2;
        int x = F.func(z);
        System.out.println(z);
        System.out.println(x);

        x = F.func(x + z);
        System.out.println(x);

    }
}

Почему х = 5?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Если сомневаешься, напиши.Итак, мы начинаем с ...

int z = 2;
int x = F.func(z);

, который вызывает ...

public static int func(int x) {
    x = x + 2;
    x = funcB(x);
    return x++;
}

Итак, ввод x равен 2

  • x = x + 2 = 2 + 2 = 4, поэтому x теперь равно 4
  • x = funcB(x)

, что вызывает ...

public static int funcB(int z) {
    return ++x + z;
}
  • Тогда ввод z равен 4
  • ++x + z, x равен 0
  • ++x - это приращение префикса, означающее, чтоинкремент будет применяться ДО выполнения остальной части оператора, делая x = 1
  • 1 + z = 1 + 4 = 5

Назад кfunc

  • return x++; - это трюк (и общая область ошибок), x++ - это постфиксное добавление, означающее, что x будет увеличиваться ПОСЛЕ выполнения инструкции(ради аргумента), что означает, что метод вернет 5
0 голосов
/ 09 февраля 2019

Причина, по которой х равен 5 в вашем основном методе, кроется в тонком x++.Оператор return в сочетании с x ++ - это хитрость, потому что x ++ означает, что сначала вы используете x в текущей инструкции, а затем увеличиваете его на единицу.Ваш код будет расширен до Return x;Х = х + 1

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