Этот метод должен возвращать результат типа 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);
        }
    }
}

Кроме того, компилятор должен предупредить вас, что в конце есть "Missing return statement", хорошая IDE сообщит вам об этом, вам следует работать с хорошими инструментами.

azro 22.04.2018 12:07

@azro ... правда, как IntelliJ IDEA

Letsintegreat 22.04.2018 12:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
49
2

Ответы 2

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

 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) не соответствует действительности? За это нет возврата. Значит, вам чего-то не хватает.

Нет, я переформатировал код и добавил комментарий, чтобы показать проблему, поскольку форматирование исходного кода - это то, что затрудняло просмотр ...

Florian Schaetz 22.04.2018 12:03

Это ответ, но по-сократовски, который подходит не каждому читателю. Вы можете отредактировать его, чтобы сказать, ваша функция не возвращает значение в случаях все.

neuro_sys 22.04.2018 12:05

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

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

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

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);
}

@HarshitSeksaria Он имеет дело с рекурсией, которую, я думаю, сложнее понять, чем тернарный условный оператор.

Eran 22.04.2018 12:15

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