当前位置: 首页 > 知识库问答 >
问题:

if/for/while中的“缺少返回语句”

姜凯风
2023-03-14

关于if()while()for()语句中使用的返回语句,我有一个问题。

正如您在下面的方法中所看到的,它期望I返回一个字符串值。问题是,如果在if语句块中使用return语句,编译器将返回错误缺少的return语句

public String myMethod()
{
    if(condition)
    {
        return x;
    }
}

当然,我可以将方法头更改为val,并使用System.out.println而不是返回。但这是正确的做法吗?我是不是漏了什么?


共有3个答案

赫连照
2023-03-14

这是非法的语法。返回变量不是一件可选的事情。必须返回在方法中指定的类型的变量。

public String myMethod()
{
    if(condition)
    {
        return x;
    }
}

你实际上是在说:我保证任何类都可以使用这个方法(public),我保证它总是返回一个字符串(String)。

那么你是说如果我的条件是真的,我会返回x。那太糟糕了。你的promise中没有“如果”。您promisemyMethod将始终返回字符串。

即使您的条件总是true,编译器也必须假设它有可能是false。因此,您总是需要在任何条件之外的非无效方法的末尾放置一个返回值,以防所有条件都失败。

public String myMethod()
{
    if(condition)
    {
        return x;
    }
    return ""; // Or whatever the default behavior will be if all of your conditions fail to return.
}
平元明
2023-03-14

这是因为函数需要返回一个值。想象一下,如果执行myMethod()而不进入if(condition)函数将返回什么?编译器需要知道在每次可能的函数执行中返回什么。

查看Java文档:

定义:如果一个方法声明有一个返回类型,那么在该方法的末尾必须有一个返回语句。如果return语句不在那里,就会抛出缺少的return语句错误。

如果方法没有返回类型,并且没有使用void声明(即错误地忽略了它),也会引发此错误。

你可以这样做来解决你的问题:

public String myMethod()
{
    String result = null;
    if(condition)
    {
        result = x;
    }
    return result;
}
段干茂实
2023-03-14
匿名用户

如果您在if语句中,同时在语句中,或在语句中,放置了一个返回语句,那么它可能返回值,也可能不返回值。如果它不进入这些语句,那么该方法也应该返回一些值(可能为null)。为了确保这一点,编译器将强制您编写这个返回语句,它位于iffor之后。

但是,如果您编写一个if/else块,并且其中每个块都有一个返回值,那么编译器知道ifelse将被执行,并且该方法将返回一个值。所以这次编译器不会强迫你。

if(condition)
{
    return;
}
else
{
    return;
}

 类似资料:
  • 关于或语句中使用的return语句,我有一个问题。正如您在下面的方法中所看到的,希望I一个字符串值。问题是,如果在语句块中使用语句,编译器将返回错误。 当然,我可以将方法头更改为,并使用而不是。但这是正确的做法吗?我是不是漏掉了什么? 任何帮助都是非常感谢的。

  • 我可以找到类似的问题,但我找不到我对这个特定案例期望的答案。 当我执行这段代码时,我得到一个编译错误,上面写着“缺少返回语句”。但是,据我所知,很明显,for循环中的代码将毫无疑问地执行,因为第一次,x=0。因此,对于这种特殊情况,没有理由不在for循环中执行代码。那么,为什么我们还需要在for循环之外声明一个额外的return语句呢?。

  • 问题内容: 为什么这给了我一个丢失的退货陈述错误?每个if / else都有返回值,最后一个括号出现错误 问题答案: 每个语句都在一个语句内。虽然从逻辑上讲这是不可能的,但是当所有评估都不为真时,编译器需要返回。 我建议: 我认为,此解决方案可解决编译器问题并稍微提高可读性。 或者,有以下解决方案: 引发异常将使你可以退出方法而无需返回任何信息……因为可以说,如果到达最后一个,显然会出错。

  • 我有一个二维布尔数组“poorSignal”,需要编写一个返回网格的方法,如果数组上的一个点为真,则显示X,如果为假,则显示O。这是我的代码: 当我编译时,它在方法的最后一行给出了“missing return statement”。我也不确定“return”\n在打印阵列时是否可以添加新行。 这是一个赋值问题,所以我不能直接打印它,也不能只打印布尔值——它必须是一个生成网格的方法。

  • 下面的Java不工作,因为它缺少一个return语句。我搞不懂怎么了。有什么想法吗? 即使我去掉字符串u,它也会给出相同的错误,如果我添加int usernameLimit,它也会给出相同的错误。

  • 我正在运行这段java代码,遇到一个错误“缺少返回语句”,请帮助。我在windows中使用cmd运行。