错误在Java返回类型中

时间:2012-08-24 22:42:23

标签: java return

我有这段代码:

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

抛出此错误:“此方法必须返回int类型的结果”。为什么一定要这样?

我知道当我将else if更改为else时,此问题就解决了。但是,当我使用else-if时,为什么我收到此错误?

6 个答案:

答案 0 :(得分:3)

当没有条件满足时(即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-if时,我得到了这个错误?”

首先,我建议您了解ifelseelse if的工作原理,因为了解分支如何工作是编写正常运行代码所需的核心知识。

使用else if时它不起作用的原因是因为else if块中的代码只有在else if块的布尔表达式求值为true时才会执行。因此,Java编译器发现存在执行块的 none 的情况(因此ifelse if块都不会被执行。这意味着有一种情况,return语句都没有被执行。这违反了方法的签名,该方法表明方法总是返回int。现在,当您将else if更改为else时,您的代码就会正常工作,因为else中的代码始终总是运行前面的if(或else if s)块没有运行。

答案 1 :(得分:2)

那么当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。您认为会发生什么?

答案 2 :(得分:1)

有一种情况是您的代码不返回值。 I.E.如果既不符合else if条件,也不满足else条件。因此,编译器会标记错误。

如果你有else if而不是else if ( x <= y ) { .... } ,编译器肯定会在两种情况下都返回一个值。这就是为什么它很好。

另请注意 - “覆盖所有案例”是不够的。例如,如果您将else if更改为

else

然后在技术上涵盖所有情况(并发修改除外)。但是,编译器知道这一点并不容易,它会标记错误。

编译器确定您具有返回值的唯一方法是 if condition 之外的return或{{1}}。

答案 3 :(得分:0)

现在您的功能可能不会返回任何内容。 例如,如果x = y,则(x > y)(x < y)都不为真。因为你的函数只有在x&gt;时定义的return语句。 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;
}

答案 4 :(得分:0)

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

public int Bol(int x, int y){

int之后的public表示返回类型。您必须从此方法返回该类型的内容,因为Java是strongly typed language。当您在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.

答案 5 :(得分:0)

了解您的代码逻辑。是否会出现if条件不满足的情况?是的,这是可能的(即当x==y时)并且在那种情况下该函数不返回任何东西。对于这种情况,你需要在函数中有默认的返回值,你已经错过了,编译器正在抱怨。