Do-while 语句 Java

Posted

技术标签:

【中文标题】Do-while 语句 Java【英文标题】:Do-while statement Java 【发布时间】:2016-01-10 12:19:10 【问题描述】:

我是编程新手。我很难理解这段代码:

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 false; 是无法访问的代码。编译器不知道 invalidResponse 永远不会更新,但如果您将其更改为 do ... while (true); 您会从最后一个 return 语句中得到一个编译错误。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

谢谢。这是编写此方法的最佳方式还是使用其他循环语句更合适? @MarcoGreselin 这是一个很常见的成语。我会内联 invalidResponse 变量,但这比什么都重要。

以上是关于Do-while 语句 Java的主要内容,如果未能解决你的问题,请参考以下文章

java循环语句while与do-while

Java利用do-while循环语句计算1!+2!+3!…n!

java基础语法学习day05---初学者必看详解

java基础语法学习day05---初学者必看详解

Java 利用do-while循环语句计算1!+2!+3!…+n!

Java基础之路--流程控制语句