Java循环编译错误

标签 java loops

有人能给我解释一下吗?首先,我知道为什么这段代码

String getName(){
    for(;;){}
}

会违反return 类型的方法:它是无限的,但是为什么这段代码需要一个最终返回值

String getName(){
    for(;i < limit; i++){// i is already defined
        if(someArrayList.get(i).isDead)
            continue;
        return someArrayList.get(i).name;
    }
    //needs a final return
}

返回值存在于循环内部,为getName()方法返回值,请问是什么原因呢?另一个 post建议如果循环对我的条件不利怎么办,所以我这样重写了它:

String getName(){
    for(; i < 10; i++){// i is already defined
        if((i+1) == limit){
            if(!someArrayList.get(i).isDead)
                return "";
        }else{
            if(someArrayList.get(i).isDead)
                continue;
            return someArrayList.get(i).name;
        }
    }
    // needs a final return
}

同样的编译时错误,即使我在for循环条件中重新定义了i,为0,所以我的i变成了零,如果内部条件检查结果是否定的,我会自己处理。总而言之,如果我将它嵌套在一个无限循环中,就可以了。

String getName(){
    for(;;){
        for(; i < limit; i++){// i is already defined
            if(someArrayList.get(i).isDead)
                continue;
            return someArrayList.get(i).name;
        }
    }
}

是因为它有范围吗?因为感觉涵盖了所有场景,所以我只想知道为什么,在我添加最后一个returnand life's good

最后这一切正常:

String getName(){
    for(;;){
        for(; i < limit; i++){// i is already defined
            if(someArrayList.get(i).isDead)
                continue;
            return someArrayList.get(i).name;
        }
        return "";
    }
}

Mr. skeet says this type of code is ok in java

最佳答案

你需要一个最终的 return声明,因为您的列表可能仅包含“死”条目,在这种情况下,您的程序将达到“限制”并退出 for 循环。

我看到这里的评论,所以需要澄清一下。编译器无法分析所有可能的结果并 100% 确定循环是否会自然结束。这在理论上是不可能的(您可以阅读关于 The Halting Problem 的更多信息)。

虽然编译器有时可以弄清楚,但它通常只会在相对简单的情况下尝试这样做。其背后的原因很简单——如果你的代码足够复杂以至于不清楚循环是否结束——它会让人类读者感到困惑,他们不明白为什么循环后没有 return 语句。这样的代码是错误的代码。

关于Java循环编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327316/

相关文章:

java - Java 可以取消引用语句吗?

java - 是零还是负数?

java - 如何替换数组中的静态值

java - 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行

javascript - 使用 for 循环在 Canvas 中绘制 img

python - 循环遍历一个列表以查看是否有任何用户名对应于其他列表 Python

java - 如何在Java中迭代多维数组?

javascript - 单击更改 CSS 背景图像 - while 循环不起作用

c - 在多个循环环境中迭代三个值的最有效方法

java - 为什么当我按下 enter 时我的程序不会停止