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

Java 7递归函数生成多维数组所有索引的问题求助

解决多维数组索引递归遍历的数组越界问题

我来帮你排查下代码里的问题,然后给出能正确生成所有索引组合的递归实现~

原代码的核心问题

你的代码出现数组越界,主要是这几个逻辑漏洞导致的:

  1. 条件判断顺序错误:你先判断index[dimensionIndex] < dimensionSizes[dimensionIndex],但没有先检查dimensionIndex是否已经超出维度数组的长度。当dimensionIndex等于dimensionSizes.length时,访问index[dimensionIndex]就会触发数组越界(因为index的长度和维度数一致,最大索引是length-1)。
  2. 缺少正确的终止逻辑:你没有明确处理“所有维度都遍历完成”的情况,反而在循环中途输出索引,导致很多组合被遗漏,同时递归的走向也混乱。
  3. 索引重置逻辑缺失:当某一维遍历到最大值后,你没有把该维的索引重置为0,后续递归时无法正确生成下一组跨维度的组合。

正确的递归实现方案

下面是修正后的代码,逻辑更清晰,能正确生成所有维度的索引组合:

import java.util.Arrays;

public class MultiDimIndexGenerator {
    public static void main(String[] args) {
        // 测试二维6×6数组
        generateAllIndexes(new int[]{6, 6});
        // 测试三维2×2×2数组
        // generateAllIndexes(new int[]{2, 2, 2});
    }

    private static void generateAllIndexes(int[] dimensionSizes) {
        // 初始化索引数组,长度与维度数一致,初始值默认都是0
        int[] currentIndex = new int[dimensionSizes.length];
        recursiveGenerate(currentIndex, dimensionSizes, 0);
    }

    private static void recursiveGenerate(int[] currentIndex, int[] dimensionSizes, int currentDim) {
        // 终止条件:所有维度都已设置完成,输出当前索引组合
        if (currentDim == dimensionSizes.length) {
            System.out.println(Arrays.toString(currentIndex));
            return;
        }

        // 遍历当前维度的所有可能取值
        for (int i = 0; i < dimensionSizes[currentDim]; i++) {
            currentIndex[currentDim] = i;
            // 递归处理下一个维度
            recursiveGenerate(currentIndex, dimensionSizes, currentDim + 1);
        }
    }
}

代码逻辑说明

  1. 终止条件明确:当currentDim等于维度数组的长度时,说明我们已经为每个维度都设置了索引值,此时直接输出当前的索引组合即可。
  2. 维度遍历逻辑清晰:对于每个维度,我们从0遍历到该维度的最大值(dimensionSizes[currentDim]-1),设置好当前维度的索引值后,递归进入下一个维度的处理。
  3. 自动覆盖索引值:因为递归返回后,循环会继续给当前维度赋值下一个数值,所以不需要手动重置索引——下一次循环会自动覆盖之前的值,保证每一组组合都是正确的。

这样运行代码后,就能得到你需要的所有索引组合:比如int[]{6,6}会输出36组二维索引,int[]{2,2,2}会输出8组三维索引,而且不会出现数组越界的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:38:30