此方法必须返回int、java类型的结果

此方法必须返回int、java类型的结果,java,return,Java,Return,我想写一个能在rekursiv上运行的程序。它应添加两个变量。但我只允许加1或减1。我创建了.Java文件。他们每个人都有一个班 这是主要课程: package rekursion; public class Main_function { public static void main(String[] args) { // TODO Auto-generated method stub int a= 5;

我想写一个能在rekursiv上运行的程序。它应添加两个变量。但我只允许加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);
        }
    }
}

让我把它格式化一点,让你更清楚

 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)
不是真的呢?没有回报。因此,您缺少了一些内容。

您的方法在其所有执行分支中都必须有一个返回值

问题是你是否应该支持负输入

如果没有,您可以将方法更改为:

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

不,我重新格式化了代码并添加了注释以显示问题,因为原始代码的格式很难看到…这是答案,但以苏格拉底的方式,并不适合所有读者。你可以编辑它,说你的函数并不是在所有情况下都返回一个值。此外,编译器应该警告你最后有“缺少返回语句”,一个好的IDE会告诉你,你应该使用好的IDEtools@azro... 没错,就像IntelliJIDEA@HarshitSeksaria他在处理递归,我认为这比三元条件运算符更难理解。