如何修复无执行动作的for循环?邮递员问题代码调试求助
邮递员问题代码循环未执行的修复方案
核心错误点
- 循环条件完全写反:所有for循环的终止逻辑都搞反了。比如初始化
i=0却判断i>=99,初始step=1却判断step>=100,这些条件从一开始就不成立,导致循环体一次都不会执行。正确条件应该是i <=99、step <=100。 - 内层循环边界错误:第二个内层循环的
i>98会漏掉索引99的邮箱,应该改为i <=99才能覆盖所有100个邮箱。 - if语句逻辑无效:
if(mailboxes[i] = false)是赋值操作而非相等判断(判断要用==),而且两个连续的if会把刚设为true的值立刻改回false,完全达不到翻转状态的目的,直接用mailboxes[i] = !mailboxes[i];就能实现状态翻转。 - 冗余初始化:Java中boolean数组默认初始值就是false,第一个循环可以直接删除。
修正后的代码
public class MailmanProblem { public static void main(String args[]) { System.out.println("start"); boolean mailboxes[] = new boolean[100]; System.out.println("set all to false (default)"); // 执行步骤1-100 for(int step=1; step <= 100; step++) { for(int i=step-1; i <= 99; i+=step) { // 数组索引从0开始,step对应邮箱号需转成step-1 mailboxes[i] = !mailboxes[i]; } } System.out.println("did all steps"); // 检查并打印结果 for(int num=0; num <= 99; num++) { System.out.println((num+1)+" is "+mailboxes[num]); // 索引num对应第num+1个邮箱 } System.out.println("printed results"); } }
额外说明
原代码中忽略了数组索引从0开始的特性:step=1对应第1个邮箱,其数组索引是0,所以内层循环起始值要改成step-1,才能正确对应邮递员问题中“第step步操作第step、2step...个邮箱”的逻辑。
内容的提问来源于stack exchange,提问作者Corrupted_RainbowGuy
相关产品推荐
相关产品推荐

