繁体   English   中英

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声明之后呢?

这有点像反模式 - 循环是无限的,永远不会“正确”终止。 相反,一旦获得有效响应,您只需调用return ,然后退出该方法,从而终止循环。

循环后return false是编译限制。 在java中,如果方法返回一个值,那么每个可想到的分支必须包含一个return语句(或者确切地说是一个throw语句)。 在编译时,Java不“知道”循环可能永远不会被终止,因此它会强制您在该分支中具有return语句(即,假设循环终止而没有ifelse if分支被执行)。

最后一次“返回假”; 就在那里,编译器不会抱怨,它是无法访问的代码。 因为返回类型是布尔值,所以对于所有情况,您的代码必须返回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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM