2 возвращает стрельбу в той же функции? - PullRequest
0 голосов
/ 20 июля 2011

Сегодня я работаю часами, так что я могу упустить что-то глупое, но на данный момент я немного слеп к этому и ищу объяснение этому поведению

Я привел пример проблемы, с которой столкнулся, и решение, которое я нашел, не совсем решение.

Проблема: в следующую функцию я передаю 1 как shotCount и 9 как Обратный отсчет результат, когда я отлаживаю, я вижу первый if run и запускаю return 2, но затем и остальное решает запустить и, наконец, вернуть -1

    public int getNextShot(int shotCount, int Countdown)
    {
        if ((shotCount == 1) && (Countdown != 10)) return 2;
        else if (shotCount == 0) return 1;
        else return -1;
    }

НО, если я делаю это (те же параметры), это работает:

   public int getNextShot(int shotCount, int Countdown)
    {
        int res = -2;
        if ((shotCount == 1) && (Countdown != 10))  res = 2;
        else if (shotCount == 0) res = 1;
        else res = -1;
        return res;
    }

Я что-то здесь упускаю?

Спасибо:)

Ответы [ 2 ]

4 голосов
/ 20 июля 2011

Я думаю, что вы ошибаетесь.

Иногда отладчик в Eclipse действует как его переход к последней строке вызова метода, но затем возвращает правильное значение.

Например, япросто скопировал и вставил твой код, и он работал нормально для меня.Код ниже напечатан 2.

public class AA {

        public static void main(String[] args) {

                System.out.println(getNextShot(1, 9));

        }

        public static int getNextShot(int shotCount, int Countdown)
    {
        if ((shotCount == 1) && (Countdown != 10)) return 2;
        else if (shotCount == 0) return 1;
        else return -1;
    }
}
0 голосов
/ 20 июля 2011

Этот код в порядке. Когда я запускаю это:

public static int getNextShot1(int shotCount, int Countdown) {
    if ((shotCount == 1) && (Countdown != 10)) {
        return 2;
    } else if (shotCount == 0) {
        return 1;
    } else {
        return -1;
    }
}
public static int getNextShot2(int shotCount, int Countdown) {
    int res = -2;
    if ((shotCount == 1) && !(Countdown == 10)) {
        res = 2;
    } else if (shotCount == 0) {
        res = 1;
    } else {
        res = -1;
    }
    return res;
}
public static void main(String[] args) throws KeyStoreException, ParseException {
    System.out.println(getNextShot1(1, 9));
    System.out.println(getNextShot2(1, 9));

}

Я получаю

2
2 

на консоли :) Вторая функция может выглядеть так (последнее ключевое слово):

public static int getNextShot2(int shotCount, int Countdown) {
    final int res;
    if ((shotCount == 1) && !(Countdown == 10)) {
        res = 2;
    } else if (shotCount == 0) {
        res = 1;
    } else {
        res = -1;
    }
    return res;
}
...