2017-02-16 5 views
1

Ich habe eine Zuordnung zu Schnittstellen, abstrakten Klassen, Unterklassen und Vererbung für meine Java-Klasse. In meiner abstrakten Oberklasse (Matrix) muss ich die toString() -Methode überschreiben (mit der gleichen Signatur), so dass es alle Elemente eines Arrays getrennt durch ein Leerzeichen und Linien getrennt durch einen Zeilenumbruch druckt. Gefällt mir:Problem beim Überschreiben von toString() in Java

public String toString(){ 

    String result=""; 

    for(int x=0; x<nRows(); x++){ 
     for(int y=0; y<nColumns(); y++){ 
      result+=""+get(x,y)+" "; 
     } 
     result+="\n"; 
    } 
    return result; 
} 

So weit so gut, denke ich. Dann habe ich in einer der Unterklassen (FullMatrix) von Matrix eine statische Methode, die Zufallszahlen generiert, um eine m x n Matrix zu füllen. Das Verfahren ist wie folgt:

public static FullMatrix randomMatrix(int m, int n, double low, double high){ 

    FullMatrix resultMatrix = new FullMatrix(m,n); 
    for(int x=0; x<m; x++){ 
     for(int y=0; y<n; y++){ 
      resultMatrix.set(x,y,Math.round(low+Math.random()*(high-low))); 

     } 
    } 
    return resultMatrix; 
} 

Wieder keine Probleme bisher. Aber in meinem Haupt-Methode in einer anderen Klasse, wenn ich rufe die statische Methode randomMatrix wie folgt aus:

FullMatrix a = new FullMatrix(4,4); 
    a.randomMatrix(4,4,-3,5); 

es gibt mir eine Matrix voller Nullen. Ich dachte, das Problem liege bei meinem Randomisierungsalgorithmus, aber nein. Ich begann mit dem Debuggen, und es stellt sich heraus, dass meine resultMatrix von der Methode randomMatrix die toString-Methode verwendet und zu einer großen Zeichenfolge wird (die das Ergebnis ausgeben soll), sodass ich den Elementen keine neuen zufälligen Werte zuweisen kann. Das Seltsame ist, dass toString() niemals in randomMatrix aufgerufen wird. Warum verwendet resultMatrix die toString-Methode? Ich habe versucht, die toString-Überschreibung in meiner Oberklasse zu kommentieren, und es löst das Problem, aber in meiner Aufgabe muss ich die Matrizen auf diese Weise drucken.

Hilfe? Was mache ich falsch?

+3

Der Aufruf 'a.randomMatrix (4,4, -3,5);' gibt ein 'FullMatrix' Objekt, aber Sie werden nicht den Rückgabewert verwendet wird, so dass es wird einfach verworfen. Tun Sie etwas wie folgt: 'FullMatrix a = FullMatrix.randomMatrix (4,4, -3,5);'. – Jesper

+2

Sie rufen eine statische Methode für eine Instanz auf. Hast du vielleicht etwas in der Art von 'FullMatrix a = FullMatrix.randomMatrix (4,4, -3,5)' gemeint? – Kevin

+2

'toString' scheint nicht dein Problem zu sein. –

Antwort

1

Sie dürfen keine statischen Methoden mit einem Objekt aufrufen, da dies keinen Sinn ergibt. Die Matrizen a und resultMatrix sind zwei unabhängige Objekte. Um eine Zufallsmatrix zu erhalten, rufen:

Matrix m = FullMatrix.randomMatrix(...); 
Verwandte Themen