2016-12-06 4 views
1

Ich habe eine durch Kommas getrennte Zeichenfolge, die in zwei dimensionale Arrays aufgeteilt werden muss. Ich schaffe das Array wie folgt aus:Zwei dimensionale Arrays, die in Java nicht richtig initialisiert werden

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

} 

Aber wenn ich es drucken:

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

Das Array sieht wie folgt aus:

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

Was mache ich falsch? Wie behebe ich das?

Antwort

3

Das Problem, das Sie hier haben, ist:

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

Sie sind beide j und z erhöht wird, werden sie zu 0 initialisiert und jede Schleife Sie von 1. Dieser Wert wird inkrementiert Deshalb Ausgabe kommt diagonal heraus.

Was Sie tun möchten, ist inkrementieren jedes Mal, und wenn Sie bis zum Ende Ihrer Zeile, erhöhen Sie j.

Verwenden der Array-Initialisierung als Beispiel 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: Ich empfehle nicht 8 und 4 wie hart hier codierte Werte, sondern tatsächlich die Länge des Arrays immer statt. Aber da es scheint, dass Sie ein Anfänger sind, habe ich diese Hardcoded verwendet, um das Beispiel klarer zu machen.

0

Sie ändern die Zeile und Spalte mit jeder einzelnen Iteration der for-Schleife. Sie möchten nur die Zeile ändern, wenn Sie das Ende der Spalten für diese Zeile erreichen.

Entfernen Sie die z++ Sie derzeit haben, sowie die if (z==8) Teil, weil z nie in diesem Fall, dass hohe bekommen, und ändern Sie den if (j==4) Teil zu 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

können Sie einfach tun:

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

Und dann einfach ausdrucken das 2d-Array mit ähnlichen for-Schleife oben gezeigt.

Verwandte Themen