我有一个逗号分隔的字符串,需要拆分成二维数组。我正在创建这样的数组:
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;}
}
你正在递增 j
和 z
,它们被初始化为 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
}
编辑:我建议不要在这里使用 8
和 4
作为硬编码值,而是实际获取数组的长度。但由于您似乎是初学者,我使用这些硬编码来使示例更加清晰。
关于java - 二维数组未在 Java 中正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41002740/