Ich habe eine Klasse "Matrix" geschrieben, welche durch ein zweidimensionales Array, Matrizen erzeugt.
Soweit ist das alles klar, jedoch habe ich bei der toString-Methode meine Probleme.
Bisher habe ich folgenden Code, der jedoch nicht funktioniert:
Java:
publicStringtoString(double[][] matrix){int n = matrix.length;//Spaltenint m = matrix[0].length;//Zeilenfor(int j=0; j<m; j++){for(int i=0; i<n; i++){return(matrix [i][j]+" ");}}}
Wenn ich diese Code ausserhalb der Classe mit println anstelle von return schreiben, funktionert das.
Das Problem ist bei dieser Realisierung, dass Java das Return-Statment vermisst. (es wird in der For-Schleife anscheinden nicht angenommen).
So ich hoffe ich habe mich verständlich ausgedrückt
Wann willst du das return eigentlich haben und wann hast du es eingesetzt?
Überleg mal, was das println macht und warum da ein Matrix-Block rauskommt. Du brauchst auf alle Fälle einen String, in dem du all die Matrixzeilen ablegen kannst, wenn du sie ausgeben willst. Java kann nur ein Return.
Ich möchte später aus einer anderen Klasse heraus Rechenoperationen mit Matrizen durchführen. Dafür möchte ich dann durch den Befehl println(matrix) die komplette Matrix ausgeben lassen.
Also alles in einen String speichern und ausgeben? Wie kann man das denn realisieren?
Also die willst die unveränderte Matrix in Matrizenform über print ausgeben?
Du kannst das in einem String machen, statt sofortiger Ausgabe weist du den Wert einer neuen Variablen zu und hängst im nächsten Schleifendurchlauf nur hinten an mit dem Tabulator für die Spalten. Mit dem Zeilenumbruch verfährst du ähnlich in der anderen For-Schleife.
Ich hab mir auch mal so ein kleines Matrizenprogramm geschrieben, da hab ichs so umgesetzt:
Java:
publicfinalclassMatrix{privatefinalint[][] numbers;privatefinalint rows;privatefinalint columns;@OverridepublicStringtoString(){finalStringBuilder result =newStringBuilder();for(int m =0; m < rows;){for(int n =0; n < columns;){
result.append(numbers[m][n]);if(++n < columns) result.append(' ');}if(++m < rows) result.append('\n');}return result.toString();}}
Was du momentan machst: Höchstens einen einzigen Wert ausgeben. Wenn die Matrix "null-dimensioniert" ist, wird die Schleife nicht betreten, wodurch es keinen Rückgabewert gäbe. Daher das Compilergemecker.
Falls du eine eigene Klasse Matrix hast und die toString methode überschreiben willst dann is deine Methode falsch. Die toString-Methode hat keine übergabeparameter.
Wenn du die MEthode mit nem @Override kennzeichnest dann würde der Compiler auch meckern dass es die Methode nicht gibt.
Genau das war das Problem. Ich wollte die Methode nicht überschreiben.
Hatte ganz vergessen, dass die toString-Methode keine Übergabeparameter hat.
Jetzt läuft es! Danke (auch an die anderen Helfer)!
Warum eingentlich der Umweg auf zwei Integer Variablen?
Wieso ist denn bei dir j und i vertauscht muss das nicht andersrum?
return muss als letztes geschrieben werden...
Bei deinem ersten Post springt er immer mit dem Wert in matrix[0][0] als Rückgabewert raus.
Ein solches Statement ist wohl auch eines der return statements. Siehe hier:
In computer programming, a return statement causes execution to leave the current subroutine and resume at the point in the code immediately after where the subroutine was called, known as its return address.
In Zeile 6 hat j immer die Werte von 0 bis matrix[0].length - 1; matrix muss aber nicht immer so sein, das alle int-Arrays die gleiche Länge haben oder doch?
Man könnt matrix verwenden, für die Länge der i-ten Zeile.
Muss jedes Element von matrix eine int-Array-Referenz sein oder kann auch null referenziert sein? Wenn das nicht is, muss eben vorher auf null-Elemente geprüft werden.
Könnte matrix null sein? Macht es sinn, das die Methode eine Objektmethode ist, also nicht mit static gekennzeichnet ist? Wenn matrix wesentlich die Klasse mmacht, dann wahrscheinlich schon.
Sokönnte man es auch so schreiben:
Java:
privateint[][] matrix;publicstaticStringtdats(int[][] iaa){if(iaa ==null){return"null array";}StringBuilder b =newStringBuilder();for(int i =0; i < iaa.length; i++){if(iaa[i]==null){
b.append("null");}else{for(int j =0; j < iaa[i].length; j++){
b.append(iaa[i][j]);
b.append(' ');}}
b.append('\n');}return b.toString();}publicStringtoString(){returntdats(matrix);}