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

Java布尔数组作业求助:邮箱翻转实验程序调试

邮递员翻转邮箱问题调试方案

作业要求:模拟邮递员“翻转邮箱”实验,100个编号1-100的邮箱初始全关闭,按以下规则操作:

  • 第1步:翻转所有邮箱
  • 第2步:翻转所有编号为2的倍数的邮箱
  • 第3步:翻转所有编号为3的倍数的邮箱
  • ...
  • 第100步:仅翻转第100号邮箱
    最终输出所有处于打开状态的邮箱编号

你的代码核心错误

  • 死循环+数组越界:for(int count = 0; count <= Mail.length; count = count++)存在两个致命问题:count = count++会导致count值永远不变,陷入死循环;count <= Mail.length会让count达到100,访问Mail[100](数组索引仅0-99)直接触发越界。
  • 索引对应错误:邮箱编号是1-100,但数组索引是0-99,你直接用邮箱编号当索引,导致操作的是错误的邮箱(比如要操作邮箱2,应该用索引1)。
  • 翻转逻辑错误:内层循环count3 = count3 + 3固定加3,不管外层步骤数count2,完全不符合“翻转当前步骤数倍数邮箱”的要求。
  • 赋值代替比较:多处用=(赋值运算符)代替==(比较运算符),比如if(Mail[count3] = false),这会直接修改数组值,而非判断状态。
  • 输出逻辑颠倒:你判断的是邮箱关闭状态并输出,且print++会跳过部分邮箱,循环条件还存在越界问题。

修正后的代码

import java.util.Arrays;

public class MailManProblem {
    public static void main(String[] args) {
        // 数组索引0对应邮箱1,索引99对应邮箱100,初始全关闭(false表示关闭)
        boolean[] mailboxes = new boolean[100];
        Arrays.fill(mailboxes, false);

        // 模拟1到100步的翻转操作
        for (int step = 1; step <= 100; step++) {
            // 翻转当前step倍数的邮箱:从step开始,每次加step
            for (int mailboxNum = step; mailboxNum <= 100; mailboxNum += step) {
                // 转换为数组索引:邮箱编号-1
                int index = mailboxNum - 1;
                // 翻转状态:取反
                mailboxes[index] = !mailboxes[index];
            }
        }

        // 输出所有打开状态的邮箱(true表示打开)
        System.out.println("打开的邮箱编号:");
        for (int i = 0; i < mailboxes.length; i++) {
            if (mailboxes[i]) {
                // 数组索引+1得到邮箱编号
                System.out.println(i + 1);
            }
        }
    }
}

代码说明

  1. 索引对应:用邮箱编号-1对应数组索引,解决编号与索引不匹配的问题。
  2. 翻转逻辑:外层循环控制步骤数,内层循环遍历当前步骤数的所有倍数,用!mailboxes[index]直接翻转状态,简化代码。
  3. 输出逻辑:仅判断mailboxes[i]为true(打开)的情况,输出对应的邮箱编号(索引+1)。
  4. 冗余代码移除:去掉重复初始化数组的循环,用Arrays.fill一次性完成初始化。

内容的提问来源于stack exchange,提问作者M_DS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:15:30