我是编程新手。我很难理解这段代码:
public static boolean onCampus(String name)
{
boolean invalidResponse = true;
do{
System.out.println("Is "+name+ " living on campus? (yes/no)");
String response = in.nextLine();
if(response.equalsIgnoreCase("yes"))
return true;
else if (response.equalsIgnoreCase("no"))
return false;
else
System.out.println("Invalid response.");
} while(invalidResponse);
return false;
}
我不知道的是,如果用户输入可接受的回复,invalidResponse
分配false
的位置是什么?什么是最后return false;
?为什么在do-while语句之后呢?
答案 0 :(得分:3)
这有点像反模式 - 循环是无限的,永远不会“正确”终止。相反,一旦得到有效的响应,您只需调用return
,然后退出该方法,从而终止循环。
循环后的return false
是编译限制。在java中,如果方法返回一个值,那么每个可能的分支必须包含return
语句(或者throw
语句,确切地说)。在编译时,Java不“知道”循环可能永远不会被终止,因此它会强制您在该分支中有一个return语句(即假设循环终止时没有if
或{{1}正在执行的分支)。
答案 1 :(得分:3)
最后一次"返回false;"就在那里,编译器不会抱怨,它是无法访问的代码。因为返回类型是布尔值,所以对于所有情况,您的代码必须返回true或false。 " invalidResponse"永远不会被赋值为false,所以你的循环将无限运行,直到用户输入yes或no,在这种情况下它返回boolean并退出函数。
答案 2 :(得分:2)
假设in
代表静态Scanner
变量。
循环有意无限;永远不会设置invalidResponse
false
。
相反,假设输入return
或"yes"
的值,"no"
行就是循环的方法。
最终return false;
是编译目的所必需的,但永远不会达到。
然而,值得注意的是,我是一个return
的粉丝,使用常量作为等于的前半部分,并将一次区分大小写,并将其重新编码为:
public static boolean onCampus(String name) {
boolean response = false;
do {
System.out.println("Is " + name + " living on campus? (yes/no)");
String input = in.nextLine().toLowerCase();
response = "yes".equals(input);
if (response || "no".equals(input)) {
break; // exit the loop
} else {
System.out.println("Invalid response.");
}
} while (!response);
return response;
}