【发布时间】:2015-09-28 09:48:39
【问题描述】:
谁能给我解释一下?首先,我知道为什么这段代码
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 "";
}
}
【问题讨论】:
-
如果
i最初已经超过limit(或10)怎么办?除非i的值可以在编译时确定,否则您需要最终返回,因为循环可能永远 运行。并且编译器可能不会非常努力地确定i的可能范围。 -
我也将该代码更改为
for(int i =0; i < 10; i++)仍然是那个错误,还有 10 是因为我想具体一点,但我的范围是用户可能选择的限制,在此之前我正在检查如果限制不是数组列表的大小。@dhke