Этот метод должен возвращать результат типа int, java

Я хочу написать программу, которая работает рекурсив. Это добавит две переменные. Но мне просто разрешают добавить 1 или вычесть 1. Я сделал для.Java файлов. У каждого из них есть один класс.

Вот основной класс:

  package rekursion;

    public class Main_function {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int a= 5;
            int b= 3;

            int result = rekursion.Addierer_Multiplizierer.add(a, b);

            System.out.print(result);
        }

    }

и это алгоритм:

package rekursion;

public class Addierer_Multiplizierer {

    public static int add(int x, int y){      // here it Shows an error, 
        if (x >= 0 && y >= 0){            // because the return value
            if(y==0){                 // is not of type int
                return x;       
            }
            return add(++x, --y);
        }
    }
}

2 ответа

Ваш метод должен иметь возвращаемое значение во всех его ветвях выполнения.

Вопрос в том, должны ли вы поддерживать отрицательный вклад.

Если нет, вы можете изменить свой метод на:

public static int add(int x, int y)
{
    if(y == 0) {
        return x;
    }
    return add(++x, --y);
}

В противном случае вам придется проверить знак yи решить, следует ли увеличить или уменьшить y чтобы довести его до 0:

public static int add(int x, int y) 
{
    if (y == 0) {
        return x;
    } else if (y > 0) {
        return add(++x, --y);
    } else {
        return add(--x, ++y);
    }
}

Или, если вы предпочитаете один вкладыш:

public static int add(int x, int y) {
    return y == 0 ? x : y > 0 ? add(++x, --y) : add(--x, ++y);
}

Позвольте мне отформатировать это немного для вас, чтобы сделать это более ясным...

 public static int add(int x, int y){ 
        if (x >= 0 && y >= 0){
            if(y==0){
                return x;       
            }
            return add(++x, --y);
         }
         // ok, and what if not?
    }

Ты видишь проблему? Внутри первого блока if вы всегда что-то возвращаете... Но что если (x >= 0 && y >= 0) неправда? Нет возврата за это. Так что вы что-то там упускаете.

Другие вопросы по тегам