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

for循环中缺少返回语句

毛正浩
2023-03-14

我可以找到类似的问题,但我找不到我对这个特定案例期望的答案。

public int getIndex(){
    for(int x = 0; x < 5; x++) {
        return x;
    }
}

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

共有3个答案

夏侯华彩
2023-03-14

我建议您的示例不是真实的,但您可以将其更改为do while而不存在编译错误:

public static int getIndex() {
    int x = 0;
    do {
        return x++;         
    } while (x < 5);
}
吕翰飞
2023-03-14

这是因为JVM不知道将在循环中使用的条件中断。例如:

public static int getIndex(){
  for(int x=0; x<5;x++){
    if(x<5) continue;
    return x;
  }
  return 6;
}

在这里,很明显,如果没有循环外的return,您可能会错过循环内的return语句

冯福
2023-03-14

与您不同,编译器无法(或者更确切地说,不会尝试)确定循环至少执行一次。

JLS 14.21中给出了与此相关的具体规则。特别地:

基本的

>

  • 那个

    有一个可以到达的地方

    如果

    您没有常量条件表达式,因此,编译器认为这样的for循环可以正常完成,因此它之后的语句是可达的。

    如果i

    public int getIndex(){
        for(int x = 0; true; x++) {
            return x;
        }
    }
    

    考虑到更复杂的可达性规则,编译器可以确定原始循环从未正常完成,但这种情况的实际用例太小,无法证明其复杂性。

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

    • 我得到的错误是“缺少return语句”,代码如下: 有人能帮帮我吗?多谢.

    • 你好我已经想尽一切办法弄清楚为什么返回语句没有被识别。如果我把“回报余额”放在其他地方,它会说系统。出来无法访问println。。。你们谁能帮我解释一下为什么这可能不起作用??非常感谢。

    • 关于或语句中使用的返回语句,我有一个问题。 正如您在下面的方法中所看到的,它期望I

    • 问题内容: 我有一个二维布尔数组’poorSignal’,需要编写一个返回网格的方法,如果数组上的某个点为true,则显示X,如果为false,则显示O。这是我的代码: 当我编译时,它在方法的最后一行给出了“丢失的返回语句”。我也不确定在打印数组时’return“ \ n”是否可以添加新行。 这是一个分配问题,所以我不能直接打印它,也不能仅打印布尔值-它必须是产生网格的方法。 问题答案: 编译器无

    • 问题内容: 今天,有人陪我一起滥用Java 中的关键字。我编写了一个简单的循环来验证数组中是否存在某些内容。假设是一个length数组,这是我的代码: 现在有人告诉我这不是一个很好的编程,因为我在循环内使用了该语句,这将导致垃圾回收发生故障。因此,更好的代码将是: 问题是我无法正确解释为什么第一个for循环不是一个好习惯。有人可以给我一个解释吗? 问题答案: 现在有人告诉我这不是一个很好的编程,因