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

Java中如何将[9][3][3]三维int数组按规则转换为9x9二维数组

问题描述

我有一个3维int数组array[9][3][3],希望移除主轴(而非中间轴),将其转换为2维数组arrayConvt[9][9],最终得到9x9的数组而非3x27的数组。转换规则为:将原3维数组拆分为3个等份,依次排布到arrayConvt中,注意中间数组array[i]在arrayConvt中不会保持连续,但最内层数组array[i][j]保持连续。
你也可以这样理解转换逻辑:将array看作9个3x3块的集合,需要按从左到右、从上到下的顺序重新拼接这些块。

解决方案

注释区域填写以下代码即可实现转换:

arrayConvt = new int[9][9];
// 遍历3组块,每3个块对应目标二维数组的3行
for (int blockGroup = 0; blockGroup < 3; blockGroup++) {
    // 遍历每个块内部的3行
    for (int innerRow = 0; innerRow < 3; innerRow++) {
        // 计算当前要填充的目标二维数组行号
        int targetRow = blockGroup * 3 + innerRow;
        // 遍历当前块组内的3个块,依次横向拼接
        for (int blockInGroup = 0; blockInGroup < 3; blockInGroup++) {
            // 定位原三维数组中的对应块
            int sourceBlockIndex = blockGroup * 3 + blockInGroup;
            // 复制块内当前行到目标行的对应位置
            System.arraycopy(array[sourceBlockIndex][innerRow], 0,
                            arrayConvt[targetRow], blockInGroup * 3, 3);
        }
    }
}

逻辑说明

  • 原三维数组的9个3x3块按顺序每3个分为一组,共3组,分别对应目标二维数组的前三行、中三行、后三行
  • 每组内的3个块按顺序横向拼接:每个块的第0行拼接为目标组第0行,第1行拼接为目标组第1行,第2行拼接为目标组第2行
  • 直接调用System.arraycopy复制最内层连续数组,执行效率更高

内容的提问来源于stack exchange,提问作者Azmart D Gintoki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:03