Java返回类型中存在错误

Java返回类型中存在错误,java,return,Java,Return,我有以下代码: public int Bol(int x, int y){ if(x > y){ return (x / y); }else if(x < y){ return (y / x); } } 这会引发此错误:此方法必须返回int类型的结果。为什么必须返回 我知道当我把else改成else时,这个问题就解决了。但是,当我使用else if时,为什么会出现这个错误呢?那么当x==y时会发生什么呢?你还回什么 您的方法被

我有以下代码:

public int Bol(int x, int y){
    if(x > y){
        return (x / y);
    }else if(x < y){
        return (y / x);
    }
}
这会引发此错误:此方法必须返回int类型的结果。为什么必须返回


我知道当我把else改成else时,这个问题就解决了。但是,当我使用else if时,为什么会出现这个错误呢?

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

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

当所有条件都不满足时,即当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
}
我知道当我把else改成else时,这个问题就解决了。但是,当我使用elseif时,为什么会出现这个错误呢

首先,我建议您回顾一下if、else和else-if是如何工作的,因为理解分支如何工作是编写正确运行的代码所需要的核心知识


使用else-if时它不起作用的原因是,只有当else-if块的布尔表达式计算结果为true时,才会执行else-if块中的代码。因此,Java编译器发现存在这样一种情况:没有任何块被执行,因此if和else if块都不会被执行。这意味着,在这种情况下,所有返回语句都不会执行。这违反了该方法的签名,该签名表示该方法始终返回int。现在,当您将else if更改为else时,您的代码可以工作,因为如果前面的if或else ifs块未运行,则else中的代码将始终运行

如果不满足任何条件,即当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
}
我知道当我把else改成else时,这个问题就解决了。但是,当我使用elseif时,为什么会出现这个错误呢

首先,我建议您回顾一下if、else和else-if是如何工作的,因为理解分支如何工作是编写正确运行的代码所需要的核心知识


使用else-if时它不起作用的原因是,只有当else-if块的布尔表达式计算结果为true时,才会执行else-if块中的代码。因此,Java编译器发现存在这样一种情况:没有任何块被执行,因此if和else if块都不会被执行。这意味着,在这种情况下,所有返回语句都不会执行。这违反了该方法的签名,该签名表示该方法始终返回int。现在,当您将else if更改为else时,您的代码可以工作,因为如果前面的if或else ifs块未运行,则else中的代码将始终运行

存在代码不返回值的情况。即,如果两者都不满足,或者如果条件不满足。因此,编译器会标记错误

如果您有一个else而不是else If,编译器会确保在这两种情况下都返回一个值。这就是为什么它是好的

还要注意的是,仅仅涵盖所有案例是不够的。例如,如果将else if更改为

else if ( x <= y ) {
....
}
从技术上讲,所有情况都包括在内,但同时进行的修改除外。尽管如此,编译器还是不容易知道这一点,它会标记错误


编译器确保您具有返回值的唯一方法是else或if条件之外的返回

存在代码不返回值的情况。即,如果两者都不满足,或者如果条件不满足。因此,编译器会标记错误

如果您有一个else而不是else If,编译器会确保在这两种情况下都返回一个值。这就是为什么它是好的

还要注意的是,仅仅涵盖所有案例是不够的。例如,如果将else if更改为

else if ( x <= y ) {
....
}
从技术上讲,所有情况都包括在内,但同时进行的修改除外。尽管如此,编译器还是不容易知道这一点,它会标记错误


编译器确保您具有返回值的唯一方法是else或if条件之外的返回

现在,函数可能不返回任何内容。 例如,如果x=y,那么x>y或xy和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;
}

现在有一种可能性,您的函数不返回任何内容。 例如,如果x=y,那么x>y或xy和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;
}

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

public int Bol(int x, int y){
public后面的int表示返回类型。您必须从该方法返回该类型的内容,因为Java是一个。当在if中使用else时,它将捕获其他条件未捕获的所有情况

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.

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

public int Bol(int x, int y){
public后面的int表示返回类型。您必须从该方法返回该类型的内容,因为Java是一个。当在if中使用else时,它将捕获其他条件未捕获的所有情况

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.

理解你的代码逻辑。如果条件不满足,是否会出现两种情况?是的,这是可能的,即当x==y时,在这种情况下,函数不返回任何内容。对于这种情况,您需要在函数中有默认的返回值,您错过了这个值,编译器正在抱怨。

了解您的代码逻辑。如果条件不满足,是否会出现两种情况?是的,这是可能的,即当x==y时,在这种情况下,函数不返回任何内容。对于这种情况,您需要在函数中有默认的返回值,您错过了这个值,编译器正在抱怨。

如果x==y怎么办?在这种情况下,您的代码将完全不返回任何内容。即使覆盖了x==y,编译器也将返回一个错误。如果x==y,可能会重复什么?在这种情况下,您的代码将完全不返回任何内容。即使覆盖了x==y,编译器也将返回一个错误。如果您在x@Chip如果您不希望出现x==y条件,并且希望抛出异常或返回其他值,该怎么办?@gotuskar我的意思是。。这还不足以涵盖所有的条件。例如,如果您把'else if x==y{return 1}放在了一起,编译器仍然会抱怨。@Chip-Agree!有很多场景需要考虑。如何处理这一案件由实施者决定。本质上应该是理解所显示的错误消息的含义。如果您在x@Chip如果您不希望出现x==y条件,并且希望抛出异常或返回其他值,该怎么办?@gotuskar我的意思是。。这还不足以涵盖所有的条件。例如,如果您把'else if x==y{return 1}放在了一起,编译器仍然会抱怨。@Chip-Agree!有很多场景需要考虑。如何处理这一案件由实施者决定。本质应该是理解所显示的错误消息的含义。如果你把else放在那一点上,为什么不把else放在那一点上呢!x>y相当于x,正如你所指出的,编译器更容易理解。如果你把else放在那一点上,为什么不把else放在那一点上呢!x>y相当于x,正如您所指出的那样,编译器更容易理解。如果您放置else if x呢如果您放置else if x呢