2017-02-13 7 views
-2

Meine Zeichenfolge initialisiert sich selbst als null ... oder zumindest scheint es so. Ich versuche, eine benutzerdefinierte toString-Funktion für meine Matrix zu machen. this.matrixArray ist ein 2D-Array mit den Dimensionen 'm x n'.String bleibt als Null initialisiert

public String toString() { 
    String stringAsMatrix = ""; 
    String dimensions = this.m + "," + this.n + "\n"; 
    stringAsMatrix += dimensions; 
    String[] dataRows = new String[this.m]; 

    for (int row = 0; row < this.m; row++) { 
     for (int column = 0; column < this.n; column++) { 
      String elementString = ""; 
      elementString += this.matrixArray[row][column]; 
      if (column == this.n-1) { 
       dataRows[row] += elementString + "\n"; 
      } else { 
       dataRows[row] += elementString + ","; // Only add a comma if this isn't the last element in the row 
      } 
     } 
     stringAsMatrix += dataRows[row]; 
    } 
    return stringAsMatrix; 
} 

Dies ist die Ausgabe, die ich bekomme, aber ich verstehe nicht, warum es 'Null' vor meiner Zeichenfolge druckt. Die Dimensionen sind korrekt (das Matrix-Array ist in der Tat 2x2). Die Werte selbst sind auch richtig (my matrix is {{1,2}, {3,4}})

2,2 
null1.0,2.0 
null3.0,4.0 
+0

Wenn Sie einen 'neuen String [This.m]' erstellen, beginnt es voll von Nullen. Das gleiche gilt für jedes Array eines nicht-primitiven Typs. – user2357112

+0

Auch das Erstellen von Strings mit '+ =' in einer Schleife ist eine wirklich ineffiziente Art, Dinge zu tun. – user2357112

+0

@ user2357112 '+ =' kompiliert tatsächlich einen 'StringBuilder', der hinter den Kulissen effizient ist, wie man mit' javap -c Klassenname' sieht. –

Antwort

1
dataRows[row] += elementString + "\n"; 

dataRows[row] mit null darin ausgehend. So wird es

dataRows[row] = null + elementString + "\n" 

... was genau Sie bekommen. Schreiben Sie stattdessen

dataRows[row] = elementString + "\n"; 
+0

Ich bin so dumm. Vielen Dank für die super schnelle Hilfe. –

Verwandte Themen