如何为do-while循环补充逻辑,实现双向数字打印?
解决do-while循环适配正反向打印的问题
你的代码目前只固定了start++的增长方向,所以当start > end时,打印一次后start会离end更远,循环直接终止,无法完成从大到小的打印。结合老师的提示,我们需要先判断步长方向,再调整循环逻辑,具体修改如下:
修改后的代码
public static void runLoop(int start, int end) { // 确定步长:从小到大走+1,从大到小走-1 int step = start <= end ? 1 : -1; do { System.out.print(start); // 按步长更新start start += step; // 判断更新后的start是否还在需要打印的范围内 } while ((start - end) * step <= 0); }
逻辑说明
- 步长判断:通过三元运算符
start <= end ? 1 : -1确定每次循环的步长,同时适配正、反两种打印方向。 - 循环条件优化:
(start - end) * step <= 0是简洁的范围判断方式:- 步长为1(从小到大)时,
start - end≤ 0 意味着start还没超过end,需要继续循环; - 步长为-1(从大到小)时,
start - end≥ 0,乘以-1后结果≤0,表示start还没低于end,需要继续循环; - 当
start超出目标范围后,该条件不成立,循环终止。
- 步长为1(从小到大)时,
- 适配do-while特性:do-while必然执行一次,所以即使
start和end相等,也能正确打印唯一的数字。
测试验证
- 调用
runLoop(2, 5):输出2345 - 调用
runLoop(5, 2):输出5432 - 调用
runLoop(3, 3):输出3
内容的提问来源于stack exchange,提问作者Pontus
相关产品推荐
相关产品推荐

