2016-12-06 12 views
1

コンマ区切りの文字列を2次元配列に分割する必要があります。私はこのような、そのアレイ作成しています:2次元配列がJavaで正しく初期化されていない

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;} 

} 

をしかし、私はそれを印刷する場合:私は間違って何をやっている

[-, 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 (String [] a : 2dArr) { 
    Log.i("Array in 2dArr", Arrays.toString(a)); 
} 

配列は次のようになりますか?これを修正するには?

答えて

3

あなたが持っている問題はここにある:あなたがjzの両方をインクリメントしている

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;} 
} 

、彼らは0に初期化されますと、すべてのループあなたは、なぜあなたの出力すなわち1で、この値を増加します斜めに出ています。

あなたがしたいことは、毎回zをインクリメントし、行の最後に到達したら、jを増やしてください。私はここ84としてハードコーディングされた値を使用しないことをお勧めしますが、実際の代わりに、配列の長さを取得:

例として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 
} 

EDITをご使用のアレイの初期化を使用します。しかし、あなたが初心者だと思われるので、私はこれらのハードコードを使って例をより明確にしました。

0

forループの1回の繰り返しごとに行と列を変更しています。その行の列の最後に達したときに行を変更するだけです。

削除z++あなたは現在、同様if (z==8)一部としてzが、この場合、高得ることはありませんので、とif(j == 4) { j=0; z++; }

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++; 
    if (j == 4) { 
     j = 0; 
     z++; 
    } 
} 
0

if (j==4)一部を変更、持っているあなたは、単に行うことができます。

int count = 0; 
for(int i = 0; i < 8, i++){ 
    for(int j = 0; i < 4, j++){ 
      2dArr[i][j] = arr[count]; 
      count++; 
     } 
    } 

そして、上に示した同様のforループを使用して2次元配列を単純に出力します。

関連する問題