You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复无执行动作的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:00:56