有人能给我解释一下吗?首先,我知道为什么这段代码
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;
}
}
}
是因为它有范围吗?因为感觉涵盖了所有场景,所以我只想知道为什么,在我添加最后一个return
and 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 "";
}
}
最佳答案
你需要一个最终的 return
声明,因为您的列表可能仅包含“死”条目,在这种情况下,您的程序将达到“限制”并退出 for 循环。
我看到这里的评论,所以需要澄清一下。编译器无法分析所有可能的结果并 100% 确定循环是否会自然结束。这在理论上是不可能的(您可以阅读关于 The Halting Problem 的更多信息)。
虽然编译器有时可以弄清楚,但它通常只会在相对简单的情况下尝试这样做。其背后的原因很简单——如果你的代码足够复杂以至于不清楚循环是否结束——它会让人类读者感到困惑,他们不明白为什么循环后没有 return 语句。这样的代码是错误的代码。
关于Java循环编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327316/