Java do while, while

标签 java loops do-while ambiguity

当我运行这段代码时,我可以期待什么行为:

do while(testA) {

    // do stuff

} while(testB);

它会像这样吗:

do {
    while(testA) {
        // do stuff
    }    
} while(testB);

或者:

if(testA) {
    do {
        // do stuff
    } while(testA && testB);
}

还是完全出乎意料的事情?

我问这个问题是因为我觉得这很模棱两可,对于搜索这个主题的其他人来说,不是因为我懒得测试它。

最佳答案

它相当于你的第一个 block :

do {
    while(testA) {
        // do stuff
    }    
} while(testB);

Java grammar的相关部分解析时是:

DoStatement:
    do Statement while ( Expression ) ;

Statement:
    WhileStatement

WhileStatement:
    while ( Expression ) Statement

Statement:
    Block

Block:
    { BlockStatements_opt }

您可以看到 Java 编译器会将其解析为 do <WhileStatement> while ( Expression ) ; .这是解析您编写的代码的唯一有效方法。

请记住,它没有任何特殊规则来解析此构造。由于编写 do-while 循环的不寻常方式,它最终会让人难以阅读。在正常使用中,do-while 始终写为 do { ... } while带有显式花括号。

关于Java do while, while,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434541/

相关文章:

java - 如何在此代码中使用 while 循环?

java - 为什么我的 Android Studio 应用无法在 Android 设备上运行?

java - 需要帮助在 java 中循环我的 try 和 catch 语句

java - 我在 do while 循环中遇到问题,要求用户提供新文件,而前一个文件不起作用

java - 我怎样才能在我的程序中用单词输出百位和十位数字

java - 输入后退出Java程序

java - 正则表达式中的双正斜杠句点

java - 如何使用tomcat使用eclipse webtool创建adempiere自定义模板的web ui工作区

java - 如何实现打印下一个较小元素的索引的方法(在java中)?

java - 循环问题- for : java