《Java入门指南(第7版,Java SE 9)》do-while-while代码是否有误?
关于Java中
do-while-while结构的修正方案 嘿,这个问题挺典型的——咱们先搞清楚原书里的do-while-while为啥会报错,再看看怎么把它改成合法且逻辑通顺的代码。
原结构的问题根源
Java的循环语法里根本没有do { ... } while(条件1) while(条件2);这种写法!do-while的语法规则是:
do { 循环体语句 } while(循环条件);
当你在第一个while(条件1)后面直接写第二个while(条件2)时,编译器会把第二个while当成一个独立的循环语句,但它没有对应的循环体(除非你给它加上大括号),这直接违反了语法规则,所以必然编译报错。而且从逻辑上看,这种写法也完全没法表达清晰的循环意图——到底是嵌套循环?还是需要同时满足两个条件的单次循环?
两种可行的修正方向
根据原书可能的意图,我们可以把代码改成以下两种合法的形式:
1. 如果原书想实现嵌套循环(外层do-while,内层while)
这种情况下,只需要给内层while加上大括号,明确它的循环体即可:
do { // 外层do-while的循环体代码 System.out.println("外层循环执行中"); // 内层while循环,需要用大括号包裹循环体 while(内层条件) { System.out.println("内层循环执行中"); // 记得加上内层循环的终止条件,避免死循环 内层循环变量更新语句; } } while(外层条件);
这样语法完全合法,逻辑也清晰:外层do-while先执行一次,判断外层条件满足后,重复执行外层代码+内层while循环。
2. 如果原书想实现多条件控制的单次循环
这就是你已经采用的方案:把两个条件合并到同一个while判断中,用逻辑运算符连接。比如需要同时满足两个条件才继续循环:
do { // 循环体代码 System.out.println("循环执行中"); } while(条件1 && 条件2);
如果原书意图是两个条件只要满足一个就继续循环,就把&&换成||即可。这种写法简洁高效,完全符合Java语法。
总结
原书的do-while-while写法是纯粹的语法错误,Java不支持这种复合循环结构。你通过合并条件的方式已经完美解决了问题;如果原书实际想表达嵌套循环,给内层while加上大括号就能让代码合法运行。
内容的提问来源于stack exchange,提问作者Dragon'sHope
相关产品推荐
相关产品推荐

