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语句之后?

这是一种反模式-循环是无限的,并且永远不会"正确地"终止。相反,一旦获得有效的响应,只需调用return并退出该方法,从而终止循环。

循环后的return false是一个编译限制。在java中,如果方法返回一个值,那么每个可能的分支必须包含一个return语句(准确地说,是一个throw语句)。在编译时,Java并不"知道"循环可能永远不会终止,因此它强制您在该分支中使用return语句(即,假设循环在没有执行ifelse if分支的情况下终止)。

最后一个"return false;"只是在那里,这样编译器就不会抱怨,它是不可访问的代码。因为返回类型是布尔值,所以代码在所有情况下都必须返回true或false。"invalidResponse"永远不会被赋值为false,所以你的循环将无限运行,直到用户输入yes或no,在这种情况下,它返回布尔值并退出函数。

假设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;
}

最新更新