java - 3D多维数组输出与初始化数据不匹配

标签 java arrays multidimensional-array

我一直在研究一个可以展平 3D 维数组的代码段,但是我在使用以下代码时遇到了相当令人困惑的情况。

使用的数组初始化如下:

int array[][][] = {
            {
                {000, 001, 002},
                {010, 011, 012},
                {020, 021, 022},
            },
            {
                {100, 101, 102},
                {110, 111, 112},
                {120, 121, 122},
            },
            {
                {200, 201, 202},
                {210, 211, 212},
                {220, 221, 222},
            }
    };

然后通过基本的嵌套 for 循环输出数组。 输出通过自定义 DecimalFormat 进行格式化,允许我打印 float 0。

DecimalFormat xFormat = new DecimalFormat("000");


for(int z = 0; z < array[0].length; z++) {
        for(int y = 0; y < array[1].length; y++) {
            for(int x = 0; x < array[2].length; x++) {
                System.out.println("I = "+ i + " Element at i = " + xFormat.format(array[z][y][x]));
            }
        }
    }

这个循环在数组初始化后立即使用,但输出完全让我困惑

I = 0 Element at i = 000
I = 1 Element at i = 001
I = 2 Element at i = 002
I = 3 Element at i = 008 <------- =/= 010
I = 4 Element at i = 009 <------- =/= 011
I = 5 Element at i = 010 <------- =/= 012
I = 6 Element at i = 016 <------- =/= 020
I = 7 Element at i = 017 <------- =/= 021
I = 8 Element at i = 018 <------- =/= 022
I = 9 Element at i = 100
I = 10 Element at i = 101
I = 11 Element at i = 102
I = 12 Element at i = 110
I = 13 Element at i = 111
I = 14 Element at i = 112
I = 15 Element at i = 120
I = 16 Element at i = 121
I = 17 Element at i = 122
I = 18 Element at i = 200
I = 19 Element at i = 201
I = 20 Element at i = 202
I = 21 Element at i = 210
I = 22 Element at i = 211
I = 23 Element at i = 212
I = 24 Element at i = 220
I = 25 Element at i = 221
I = 26 Element at i = 222   

这对我来说似乎相当基本,但我不确定此时我缺少什么。大部分循环打印正确,但中间的这部分输出不正确,并且对多维数组问题的搜索并没有产生太多解决方案

最佳答案

这是因为0*(0前缀)用于存储八进制数字(base8)

            {000, 001, 002}, //0,1,2 
            {010, 011, 012}, //8,9,10 
            {020, 021, 022}, //16,17,18

这就是为什么 010 翻译为十进制 8,11 翻译为 9 等。就像 0x* 用于存储十六进制,aod ***b 用于存储二进制。 DecimalFormat 获取八进制 010 的值,等于 9,这就是您在输出中得到的值。

其余的值都是小数,因为它们不以 0 开头。您可以在每个其他值前面加上 0 前缀,看看会发生什么。

关于java - 3D多维数组输出与初始化数据不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47370252/

相关文章:

java - 检测链表中的循环 - 指针何时相遇?如何通过交集找到循环的头部?

c++ - 在C++中定义二维数组的最简单方法

Javascript 循环通过 JSON 对象数组

php - 动态数组键

PHP 将二维数组按年和月分组为多维数组

java - 如何将字节数组转换为整数数组

java - AspectJ:拦截另一个方法内方法的返回结果

javascript - 从字符串 : Javascript 中提取关键字

c++ - 如何在不声明另一个数组的情况下转置二维数组?

java - 如何让Swagger使用@ApplicationPath?