java - 二维数组未在 Java 中正确初始化

标签 java arrays multidimensional-array

我有一个逗号分隔的字符串,需要拆分成二维数组。我正在创建这样的数组:

String str = "-,-,-,-,-,-,-,-,-,0,0,0,0,1,1,1,2,2,2,2,3,3,-,-,-,-,-,-,-,-,-,-";
String [] arr = str.split(",");
String [][] 2dArr = new String[8][4];

int j = 0;
int z = 0;
for(int i=0; i!=32; i++){
    Log.i("loop vars", String.valueOf(i)+" "+String.valueOf(j)+" "+String.valueOf(z));
    2dArr[z][j] = arr[i];
    j++;
    z++;
    if(j==4){j=0;}
    if(z==8){z=0;}

}

但是当我打印它时:

for (String [] a : 2dArr) {
    Log.i("Array in 2dArr", Arrays.toString(a));
}

数组看起来像这样:

[-, null, null, null]
[null, -, null, null]
[null, null, -, null]
[null, null, null, -]
[-, null, null, null]
[null, -, null, null]
[null, null, -, null]
[null, null, null, -]

我做错了什么?如何解决这个问题?

最佳答案

您遇到的问题在这里:

for(int i=0; i!=32; i++){
    Log.i("loop vars", String.valueOf(i)+" "+String.valueOf(j)+" "+String.valueOf(z));
    2dArr[z][j] = arr[i];
    j++;
    z++;
    if(j==4){j=0;}
    if(z==8){z=0;}
}

你正在递增 jz,它们被初始化为 0 并且每个循环你都会将这个值递增 1。那这就是为什么您的输出是对角线输出的原因。

你想要做的是每次递增 z,一旦你到达行尾,递增 j

以你的数组初始化为例 String [][] 2dArr = new String[8][4];

for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 4; j++) {
        // add element into the column
    }
    // inserted into the last column, now we will update the row and continue
}

编辑:我建议不要在这里使用 84 作为硬编码值,而是实际获取数组的长度。但由于您似乎是初学者,我使用这些硬编码来使示例更加清晰。

关于java - 二维数组未在 Java 中正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41002740/

相关文章:

java - Hibernate返回空对象

java - 如果设置了 session 值,则 JSTL 读取无法正常工作

java - 我可以让 MOXy 在生成 json 时重命名元素吗?

python - 为 Windows 10 安装 numpy : Importing the multiarray numpy extension module failed

c++ - 如何在C++中返回二维数组

java - 在 Java 中继承泛型接口(interface)

javascript - 尽管 [] 和 {} 是真值,为什么 []==[] 和 {}=={} 返回 false?

java - 从输入文本文件填充二维数组

c - 在二维数组中存储字符串(char*)

javascript - 将 javascript 对象或数组转换为 json 以获取 ajax 数据