如何转置并打印3D数组?Java技术实现求助
解决3D数组转置打印的问题
看起来你是想把这个以[列][行][元素]组织的3D数组,按行优先的方式打印出来(也就是转置维度后输出),原代码的遍历顺序搞反了,所以输出结构和期望不符,我们来一步步修正:
问题分析
你的数组结构是map[列索引][行索引][元素]:
- 总共有10列(
map.length = 10) - 每列有7行(
map[0].length = 7) - 每个
map[c][r]是对应列c、行r的元素数组(可能为空)
原代码的遍历顺序是列→行→元素,所以输出是把每一列的所有行依次打印,而你需要的是行→列→元素:先打印第0行的所有列对应的数组,再打印第1行的所有列数组,以此类推,这样就实现了结构的转置。另外原代码的打印格式也没处理括号,需要补上以匹配你期望的输出样式。
修正后的代码
// 先遍历行:总共有7行,从0到6 for (int row = 0; row < map[0].length; row++) { // 再遍历每一列:总共有10列,从0到9 for (int col = 0; col < map.length; col++) { int[] elements = map[col][row]; // 打印数组左括号 System.out.print("{"); // 遍历当前列当前行的元素 for (int i = 0; i < elements.length; i++) { if (i > 0) { System.out.print(" "); // 元素间加空格 } System.out.print(elements[i]); } // 打印数组右括号,加空格分隔 System.out.print("} "); } // 每行结束换行 System.out.println(); }
代码说明
- 遍历顺序调整:外层循环遍历行,内层循环遍历列,这样每一行会依次输出所有列对应的元素数组,和你期望的结构一致。
- 格式处理:每个数组前后加上
{},元素之间用空格分隔,空数组就会打印成{},完全匹配你要的直观结构。 - 避免异常:原代码其实不会崩溃(因为每个
map[threeD]都有7个元素,即使是空数组,map[threeD][twoD]不会是null),但遍历顺序错误导致结构不对,修正顺序后就解决了核心问题。
输出验证
运行这段代码后,输出会和你期望的完全一致:
{1 1 3 3 4 4 4 4} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {2 2} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {3 4} {} {} {} {} {} {} {} {0} {} {} {} {} {}
(注:每行末尾的空格可以根据需求调整,比如去掉的话可以在列循环后判断是否是最后一列再决定是否打印空格)
内容的提问来源于stack exchange,提问作者John D.
相关产品推荐
相关产品推荐

