do-while 语句 Java
Do-while statement Java
我是编程新手。我很难理解这段代码:
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 语句之后?
假设 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;
}
这有点反模式 - 循环是无限的,永远不会终止 "properly"。相反,一旦获得有效响应,您只需调用 return
,然后退出该方法,从而终止循环。
循环后的return false
是编译限制。在 java 中,如果方法 return 是一个值,则每个可能的分支都必须包含一个 return
语句(或准确地说是 throw
语句)。在编译时,Java 不会 "know" 循环可能永远不会终止,因此它会强制您在该分支中有一个 return 语句(即,假设循环终止而没有if
或 else if
个正在执行的分支。
最后的"return false;"只是为了让编译器不会报错,是无法访问的代码。因为您的 return 类型是布尔值,所以您的代码在所有情况下都必须 return true 或 false。 "invalidResponse" 永远不会分配给 false,因此您的循环将无限地 运行 直到用户输入是或否,在这种情况下它 return 是布尔值并退出函数。
我是编程新手。我很难理解这段代码:
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 语句之后?
假设 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;
}
这有点反模式 - 循环是无限的,永远不会终止 "properly"。相反,一旦获得有效响应,您只需调用 return
,然后退出该方法,从而终止循环。
循环后的return false
是编译限制。在 java 中,如果方法 return 是一个值,则每个可能的分支都必须包含一个 return
语句(或准确地说是 throw
语句)。在编译时,Java 不会 "know" 循环可能永远不会终止,因此它会强制您在该分支中有一个 return 语句(即,假设循环终止而没有if
或 else if
个正在执行的分支。
最后的"return false;"只是为了让编译器不会报错,是无法访问的代码。因为您的 return 类型是布尔值,所以您的代码在所有情况下都必须 return true 或 false。 "invalidResponse" 永远不会分配给 false,因此您的循环将无限地 运行 直到用户输入是或否,在这种情况下它 return 是布尔值并退出函数。