java返回类型错误

guykilcj  于 2021-07-09  发布在  Java
关注(0)|答案(6)|浏览(425)

我有这个密码:

public int Bol(int x, int y){
    if(x > y){
        return (x / y);
    }else if(x < y){
        return (y / x);
    }
}

它抛出这个错误:“这个方法必须返回int类型的结果”。为什么一定要这么做?
我知道当我改变的时候 else ifelse 这个问题解决了。但为什么,当我使用else if时,会出现这个错误呢?

goqiplq2

goqiplq21#

如果不满足任何条件(即 x == y )? 方法将返回什么?所以您需要返回一个默认值:

public int Bol(int x, int y){
    if(x > y){
        return (x / y);
    }else if(x < y){
        return (y / x);
    }

    return 0; // or whatever default value you need
}

使用单个 return :

public int Bol(int x, int y){

    int result = 0; //whatever default value you want

    if(x > y) {
        result = (x / y);
    } else if(x < y) {
        result = (y / x);
    }

    return result;
}

“我知道当我把else改成else时,这个问题就解决了。但为什么,当我使用else if时,会出现这种错误呢?”
首先,我建议你检查一下 if , else ,和 else if 因为理解分支如何工作是编写正确运行的代码所需的核心知识。
当你使用 else if 是因为 else if 仅当 else if 块计算结果为true。因此java编译器发现有一种情况,即没有一个块被执行(因此 if 也不是 else if 阻止执行)。这意味着在这种情况下 return 语句被执行。这违反了方法的签名,即该方法总是返回 int . 现在,当您更改 else if 到一个 else 因为 else 如果前面的 if (或 else if s) 街区还没走。

c9qzyr3d

c9qzyr3d2#

理解你的代码逻辑。有没有一种情况 if 条件不满足?是的,这是可能的(即 x==y )在这种情况下,函数不返回任何东西。对于这种情况,您需要在函数中有默认的返回值,您错过了这个值,编译器正在抱怨。

xxe27gdn

xxe27gdn3#

那么当x==y时会发生什么呢?你还回什么?
你的方法被定义为返回一个int,但是当x==y时它没有返回任何东西。
你本可以写的

if (x > y) {
    return x/y;
} else if (x < y) {
    return y/x;
} else {
    return 1;  // x == y therefore x/y is 1.
}

另外,注意x或y是zeor。假设x=1,y=0。你认为会发生什么?

evrscar2

evrscar24#

其他响应者都没有注意到的是,您的方法签名需要返回类型:

public int Bol(int x, int y){

这个 int 之后 public 指示返回类型。必须从此方法返回该类型的内容,因为java是强类型语言。当你使用 else 在一个 if 它将捕获其他条件未捕获的所有情况。

public int Bol(int x, int y){
    if(x > y){
        return (x / y);//returns a double, which can be cast to an int
    }else if(x < y){
        return (y / x); //returns a double, which can be cast to an int
    }
}    //if this line is reached, nothing is being returned, so the compiler throws an error.
lvjbypge

lvjbypge5#

现在有一种可能性,你的函数不返回任何东西。例如,如果x=y,那么 (x > y) 也不是 (x < y) 这是真的。因为函数只有在x>y和y>x时定义的返回语句,所以它不会在所有情况下都返回。
解决此问题的一种方法是在if语句之后添加默认的return语句:

public int Bol(int x, int y){
    if(x > y){
        return (x / y);
    }else if(x < y){
        return (y / x);
    }
    return 1;
}
b91juud3

b91juud36#

在这种情况下,代码不返回值。i、 e.如果两者都不是,如果或 else if 满足条件。因此,编译器会标记一个错误。
如果你有 else 而不是 else if ,编译器确定在这两种情况下都返回一个值。这就是为什么它是好的。
另请注意,“所有案件都包括在内”是不够的。例如,如果将else if改为

else if ( x <= y ) {
....
}

从技术上讲,所有的情况都包括在内(除了同时进行的修改)。不过,编译器要知道这一点并不容易,它会标记一个错误。
编译器确保返回值的唯一方法是 else 或者 return 超出if条件。

相关问题