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

为何嵌套循环仅迭代14次?Java字节数组遍历问题

嵌套while循环遍历字节数组提前终止的问题解决

问题原因

你的代码只输出14条结果,核心问题是内层循环变量递增到上限后没有重置:

  • 当最内层的moveSet[3]递增到14时,退出该循环,此时moveSet[3]的值保持为14
  • 接着moveSet[2]递增,但你没有把moveSet[3]重置为0,下一次进入moveSet[2]的循环时,moveSet[3] < 14的条件不成立,直接跳过内层循环
  • 以此类推,moveSet[2]递增到14后,moveSet[1]递增,但moveSet[2]和moveSet[3]都停留在14,后续所有内层循环都无法执行
  • 最终只有最内层的14种组合被输出,外层循环完全没有发挥作用

修正方案

方案一:补全while循环的变量重置逻辑

在每次外层循环启动时,把内层的数组元素重置为0,确保每次进入内层循环时变量都是从0开始:

import java.util.Arrays;

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

        while(moveSet[0] < 14) {
            moveSet[1] = 0; // 重置第二个元素
            while(moveSet[1] < 14) {
                moveSet[2] = 0; // 重置第三个元素
                while(moveSet[2] < 14) {
                    moveSet[3] = 0; // 重置第四个元素
                    while(moveSet[3] < 14) {
                        System.out.println(Arrays.toString(moveSet));
                        moveSet[3]++;
                    }
                    moveSet[2]++;
                }
                moveSet[1]++;
            }
            moveSet[0]++;
        }
    }

    public static void main(String[] args) {
        iterateThroughMoves();
    }
}

方案二:改用for循环(更推荐)

for循环的语法天然包含初始化、条件判断、递增三个步骤,能从根源上避免忘记重置变量的问题,代码逻辑更清晰:

import java.util.Arrays;

public class MoveIterator {
    public static void iterateThroughMoves() {
        byte[] moveSet = new byte[4];

        for (moveSet[0] = 0; moveSet[0] < 14; moveSet[0]++) {
            for (moveSet[1] = 0; moveSet[1] < 14; moveSet[1]++) {
                for (moveSet[2] = 0; moveSet[2] < 14; moveSet[2]++) {
                    for (moveSet[3] = 0; moveSet[3] < 14; moveSet[3]++) {
                        System.out.println(Arrays.toString(moveSet));
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        iterateThroughMoves();
    }
}

补充说明

两种方案都能输出所有14^4=38416种组合,其中for循环的写法更符合Java遍历多维度组合的常规习惯,后续维护或扩展(比如增加数组长度)时更不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:30:42