在Java中,我可以';t在方法中的return语句后添加代码

在Java中,我可以';t在方法中的return语句后添加代码,java,Java,我是Java新手,正在学习使用return语句的方法。 我的IDE说: 此方法必须返回布尔类型的结果 但是,我的方法只返回布尔值。如何解决这个问题 public class Test { public static void main(String[] aargs) { debug(4, 5); } public static boolean debug(int a, int b) { if(a+b == 12) { return true; }else

我是Java新手,正在学习使用return语句的方法。 我的IDE说:

此方法必须返回布尔类型的结果

但是,我的方法只返回布尔值。如何解决这个问题

public class Test {
public static void main(String[] aargs) {
    debug(4, 5);
}

public static boolean debug(int a, int b) {
    if(a+b == 12) {
        return true;
    }else if(a+b == 18){
        return false;
    }
    a = 8;
}

}返回后,您没有任何代码。警告是说你错过了一次返程

注意:不建议更改参数
a=8,但如果没有输入if语句,则必须返回某些内容。在这种情况下,在该行之后是真还是假


您可能还希望捕获
debug(4,5)的结果

Return将是方法的最后一条语句。您的方法需要在此处返回一些值。
让我们假设一个场景:如果if-else条件和if-else条件都是错误的,那么您的方法将返回什么。

编译器试图(以自己的方式)告诉您
else
案例(
a+b!=12&&a+b!=18
)正在转到
a=8
行,该代码分支缺少
return
语句


Java编译器在程序流分析方面非常聪明,所以当它告诉某些东西是错误的,那么某些东西确实是错误的。

每个可能的执行路径都应该以
return
语句结束


在这种情况下,并非所有路径都返回值。如果a+b既不是12也不是18,它将一直延伸到行
a=8
。后面不是
return
语句,而是一直到方法的末尾。编译器不知道在这种情况下应该返回什么,因此发出了一个错误。

想想如果调用debug(0,0)会发生什么。两个if语句都没有执行,因此调试方法不会返回任何内容


您必须在每个可能的分支中返回一些布尔值。

如果两个条件都失败,将返回什么?。如果两个条件都失败,则代码不会返回任何内容。所以你应该退一些东西。必须为每个可能的条件返回值。

这是java的设计模式。我们不能在return语句之后编写任何代码。如果您试图使用此代码编译,编译将失败。抛出异常也是如此

这是因为在返回或抛出异常语句之后,控件将转到调用方所在的位置。因此,这些行无法执行

在本例中,必须返回一些布尔值

代码应该是这样的

public static boolean debug(int a, int b) {
    boolean flag = false;
    if(a+b == 12) {
       flag = true;
    }else if(a+b == 18){
        flag = false;
    }
    a = 8;
    return flag;
}

你可以写a=8;在else块内部。

您也可以在编写a=8之后编写返回语句;但是如果你的条件没有任何意义,这并不能回答问题,它确实回答了我的问题;但这过于简单化了。每个执行路径中的最后一条语句应该是
return
语句;不仅仅是方法的最后一条语句。请注意,在这里为a赋值是毫无意义的,即使该语句已执行。编译器不知道您的任一条件是否为真,因此它表示您需要返回一个布尔值,在前两个条件都不为真的情况下,该布尔值将始终被命中。因此,在a=8之后需要返回true或false。这并不能解决问题。在“else”块中返回一个布尔值会检查出这一点。。