如何正确实现四层嵌套循环遍历所有字节数组组合

发布时间 - 2026-01-28 00:00:00    点击率:

本文详解为何原始嵌套循环仅输出14次结果,并提供两种可靠解决方案:修复重置逻辑的嵌套循环与更简洁的单循环+模运算实现。

你遇到的问题非常典型——表面看是四层 while 循环,本应穷举 14⁴ = 38,416 种组合(每个 byte 元素取值 0 到 13),但实际只打印了 14 行,且全部集中在 [0, 0, 0, x](x 从 0 到 13)。根本原因在于:内层循环变量未在每次外层迭代开始时重置为 0

在你的原始代码中,moveSet[1]、moveSet[2] 和 moveSet[3] 一旦递增到 14 并退出对应 while 循环后,其值就永久停留在 14,后续外层循环再次进入时,内层条件(如 moveSet[1]

✅ 正确做法:每次进入某一层循环前,显式将所有内层索引重置为 0。修正后的嵌套结构如下:

public static void iterateThroughMoves() {
    byte[] moveSet = {0, 0, 0, 0};

    while (moveSet[0] < 14) {
        moveSet[1] = 0; // ← 关键:重置第2位
        while (moveSet[1] < 14) {
            moveSet[2] = 0; // ← 关键:重置第3位
            while (moveSet[2] < 14) {
                moveSet[3] = 0; // ← 关键:重置第4位
                while (moveSet[3] < 14) {
                    System.out.println(Arrays.toString(moveSet));
                    moveSet[3]++;
                }
                moveSet[2]++;
            }
            moveSet[1]++;
        }
        moveSet[0]++;
    }
}

⚠️ 注意事项:

  • 重置语句必须放在对应 while 循环内部、紧邻循环条件之前(如 moveSet[1] = 0 放在 while (moveSet[1]
  • byte 类型虽可表示 -128 到 127,但此处用作非负计数器(0–13)完全安全,无需担心溢出;
  • 若数组长度动态变化(如支持 n 位组合),建议改用递归或迭代式进位算法,避免硬编码多层嵌套。

? 更优雅的替代方案:使用单层 for 循环 + 模运算,将四维组合映射为一维索引,代码更简洁、易扩展、无重置疏漏风险:

public static void iterateThroughMovesCompact() {
    

int total = 14 * 14 * 14 * 14; // 38416 for (int i = 0; i < total; i++) { byte[] moveSet = new byte[4]; moveSet[3] = (byte) (i % 14); // 个位(最低位) moveSet[2] = (byte) ((i / 14) % 14); // 十位 moveSet[1] = (byte) ((i / 14 / 14) % 14); // 百位 moveSet[0] = (byte) ((i / 14 / 14 / 14) % 14); // 千位(最高位) System.out.println(Arrays.toString(moveSet)); } }

? 总结:嵌套循环的“重置”是初学者高频陷阱。记住口诀:外层每进一次,内层全归零。而模运算法本质是将 base-14 的四进制数逐位分解,兼具可读性与健壮性,推荐在组合枚举场景优先采用。


# 编码  # 字节  # for  # while  # 递归  # 循环  # 算法  # 放在  # 穷举  # 迭代  # 两种  # 停留在  # 本应  # 根本原因  # 四层  # 百位 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel怎么清理缓存_Laravel optimize clear命令详解  微信小程序 input输入框控件详解及实例(多种示例)  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel Docker环境搭建教程_Laravel Sail使用指南  制作电商网页,电商供应链怎么做?  如何在宝塔面板中修改默认建站目录?  Laravel如何实现本地化和多语言支持?(i18n教程)  如何确保西部建站助手FTP传输的安全性?  无锡营销型网站制作公司,无锡网选车牌流程?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  javascript中的try catch异常捕获机制用法分析  JavaScript实现Fly Bird小游戏  Python高阶函数应用_函数作为参数说明【指导】  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Python文件异常处理策略_健壮性说明【指导】  如何在搬瓦工VPS快速搭建网站?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  微信小程序 wx.uploadFile无法上传解决办法  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何在 React 中条件性地遍历数组并渲染元素  如何在香港免费服务器上快速搭建网站?  进行网站优化必须要坚持的四大原则  如何在IIS中新建站点并配置端口与物理路径?  ,怎么在广州志愿者网站注册?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  php json中文编码为null的解决办法  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何快速完成中国万网建站详细流程?  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Android中AutoCompleteTextView自动提示  Laravel如何配置任务调度?(Cron Job示例)  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  如何快速重置建站主机并恢复默认配置?  QQ浏览器网页版登录入口 个人中心在线进入  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何用wdcp快速搭建高效网站?