Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String)

Z

zDieTaschenlampe

Aktives Mitglied
Hallo,
wie ihr dem Titel entnehmen könnt gehts um Mehrdimensionale Arrays in der Anwendung für s Arbeiten mit Matrizen. Mein aktueller Stand ist das :

Code:
public class MathMatrix {

    int[][] matrix;

    public MathMatrix(int[][] matrix) {
        this.matrix = matrix;
    }
  
    Die folgende Methode hat funktioniert, aber ich hab die Aufgabe nicht gründlich gelesen -.-
    /*public int[][] add(int[][] firstMatrix, int[][] secondMatrix) {
        matrix = new int[firstMatrix.length][firstMatrix[0].length];

        for (int i = 0; i < firstMatrix.length; i++) {
            for (int j = 0; j < firstMatrix[i].length; j++) {
                matrix[i][j] = firstMatrix[i][j] + secondMatrix[i][j];

            }
        }
        return matrix;
    }*/
  
    // diese add methode weiß ich nicht, ob sie klappt
    public void add(int[][] secondMatrix) {
        matrix = new int[matrix.length][matrix[0].length];

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = matrix[i][j] + secondMatrix[i][j];
              

            }
        }
        //return matrix;
    }
  
    // ebenso nicht getestet, da mir die toString methode Kopfschmerzen macht
    public int[][] multiply(int[][] firstMatrix, int[][] secondMatrix) {
        int[][] matrix = new int[firstMatrix.length][secondMatrix[0].length];

        for (int i = 0; i < firstMatrix.length; i++) {
            for (int j = 0; j < secondMatrix[0].length; j++) {
                for (int k = 0; k < firstMatrix[0].length; k++) {
                    matrix[i][j] += firstMatrix[i][k] * secondMatrix[k][j];

                }
            }
        }
        return matrix;
    }
  
    Keine Ahnung was ich hier mache
    public String toString() {
        String s = "";
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                s = String.format("%s ", matrix[i][j]);

            }
        }
        return s;
    }

Aufgabe lautet wie folgt : Also es soll eine nxn Matrix modelliert, werden welche die Addition und Multiplikation beherrscht, sowie eine Matrix darstellen kann.
"
Die Matrix-Vektor-Multiplikation multipliziert dabei eine n x n Matrix mit einem Spaltenvektor.Ein Spaltenvektor entspricht einer n x 1 Matrix.
Erstellen Sie dafür eine Klasse MathMatrix, die die oben genannten Operationen implementiert. In der Matrix-Klasse soll keine Ein- oder Ausgabe stattfinden. Implementieren Sie stattdessen für die Darstellung eine toString ()-Methode, die sie auch für der Operation show verwenden können. Achten Sie darauf, dass die Operation show eine textuelle Repräsentation zurückgibt. Die Matrix wird als durch Zeilenumbrüche separierte Zeilen dargestellt. Jede Zeile besteht aus durch jeweils ein Leerzeichen separierte 32-Bit-Ganzzahl. Die Matrix wird mithilfe eines öffentlichen Konstruktors MathMatrix ( int [][] matrix ) erstellt.

1. Versteh ich es richtig, dass in den Konstruktor eine Matrix gegeben wird, sodass die beiden Rechenoperationen in der Methode nur einen Parameter, also eine Matrix, mitgegeben bekommen? Wie ihr oben seht, hatte ich zuerst 2 Matrizen als Parameter in den Methoden, weil ich den Part in der Aufgabe mit dem Konstruktor überlesen hatte xD

2. Wie zur Hölle geht die toString Methode, denn ohne die, kann ich gar nichts testen . Ich hab oben im code etwas versucht, aber das stimmt sicherlich nicht. Wie die to String Ausgabe auszusehen hat, steht in der Aufgabe, aber ich weiß nicht wie ich das umsetzen soll. Ich weiß zwar, dass matrix.lenght die Zeile ist und matrix[0].length die Spalte darstellt. Aber ich weiß nicht, wie ich das in der toString Methode packe, sodass ich diese richtig überschreibe

3. Ich seh jetzt erst, dass bei der Multiplikation stets von einem Spaltenvektor als 2. Matrize ausgegangen wird, aber mein code dazu oben sollte trotzdem passen oder ?

Edit : Die to String Methode habe ich inzwischen, aber ich glaube ich verstehe die Aufgabe falsch. Die Parameter meiner Rechnungen muss meine Matrix klasse sein bzw ein Objekt davon statt wie ich es habe mit int [][] oder ?
 
Zuletzt bearbeitet:
Z

zDieTaschenlampe

Aktives Mitglied
Edit 2.0 :

Meine alten Methoden mit den 2 Parametern in den methoden beim Rechnen funktionieren beide wie Sie sollen, aber wie kann ich das so abändern, dass ich das irgendwie mit meinem Konstruktor und den damit generierten Matrizen verknüpfe ?
Ich bin irgenwie fast am Ziel, aber doch lost. Wäre sehr lieb, wenn mir jemand kurz helfen könnte
 
F

fhoffmann

Top Contributor
Du solltest dir überlegen, was das Member matrix ist und es nicht als Ergebnis deiner Rechnungen missbrauchen.
 
Z

zDieTaschenlampe

Aktives Mitglied
Du solltest dir überlegen, was das Member matrix ist und es nicht als Ergebnis deiner Rechnungen missbrauchen.

Ich denk mal, mein Matrix Attribut speichert nur die mitgegebene Matrix und für die Rechnungen brauch ich ein weiteres Attribut ? oder kannst du es mir erklären
 
F

fhoffmann

Top Contributor
Ich denk mal, mein Matrix Attribut speichert nur die mitgegebene Matrix und für die Rechnungen brauch ich ein weiteres Attribut ?
richtig

Edit: Genaugenommen brauchst du kein "Attribut" sondern eine lokale Variable.

Edit2: Und wäre es nicht sinvoller, beispielsweise folgende Methode zu schreiben:
Java:
public Matrix multiply(Matrix other)
statt
Java:
public int[][] multiply(int[][] other)
 
Zuletzt bearbeitet:
L

LMessi

Mitglied
Du brauchst nur einen Parameter. Die Berechnung wird dann auf der jeweiligen Instanz und mit einem Parameter ausgeführt. Als Ergebnis der Berechnung kann entweder die jeweilige Instanz verändert sein oder du gibst ein neues Matrix-Objekt zurück. ;) (Beides ist auch möglich, das wäre dann fluent)
 
Z

zDieTaschenlampe

Aktives Mitglied
richtig

Edit: Genaugenommen brauchst du kein "Attribut" sondern eine lokale Variable.

Das hatte ich anfangs so, aber das kann doch so nicht funktionieren, denn wie soll dann auf die lokale Variable zugegriffen werden ?

Code:
package uebungsblattTwo;

import edu.kit.informatik.Terminal;

public class MathMatrix {

    private int[][] matrix;

    public MathMatrix(int[][] matrix) {
        this.matrix = matrix;
    }

    /*public int[][] add(int[][] firstMatrix, int[][] secondMatrix) {
        matrix = new int[firstMatrix.length][firstMatrix[0].length];

        for (int i = 0; i < firstMatrix.length; i++) {
            for (int j = 0; j < firstMatrix[i].length; j++) {
                matrix[i][j] = firstMatrix[i][j] + secondMatrix[i][j];

            }
        }
        return matrix;
    }*/
    
    public int[][] add(int[][] secondMatrix) {
        int [][] sum = new int[matrix.length][matrix[0].length];

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                sum[i][j] = matrix[i][j] + secondMatrix[i][j];
                
            }
        }
        return sum;
    }
    
    public String toString() {
        StringBuilder builder = new StringBuilder();
        for (int[] m : matrix) {
            for (int i : m) {
                builder.append(i).append(" ");
            }
            builder.append("\n");
        }
        return builder.toString();
    }

So stellst du dir das dann bei der add Methode als Beispiel vor ?
 
Z

zDieTaschenlampe

Aktives Mitglied
Du brauchst nur einen Parameter. Die Berechnung wird dann auf der jeweiligen Instanz und mit einem Parameter ausgeführt. Als Ergebnis der Berechnung kann entweder die jeweilige Instanz verändert sein oder du gibst ein neues Matrix-Objekt zurück. ;) (Beides ist auch möglich, das wäre dann fluent)

das mit dem neuen Matrix objekt klingt nach einem Weg. Ich versuch das mal. Danke
 
Z

zDieTaschenlampe

Aktives Mitglied
Du musst eine "MathMatrix" zurückgeben. ;)

Wäre das so falsch oder unsauber ? Es funktioniert so auf jeden Fall auch für die Addition ? Aber ansonsten änder ich es um
Code:
edit :
public int[][] add(int[][] secondMatrix) {
        int[][] sum = new int[matrix.length][matrix[0].length];

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                sum[i][j] = matrix[i][j] + secondMatrix[i][j];

            }
        }
        return matrix = sum;
    }
 
L

LMessi

Mitglied
Naja, um damit weiterzurechnen wäre es vorteilhafter... als immer neue Objekte selber anzulegen..
 
Z

zDieTaschenlampe

Aktives Mitglied
Naja, um damit weiterzurechnen wäre es vorteilhafter... als immer neue Objekte selber anzulegen..

Also ich habs jetzt wie oben bei add beschrieben auch für multiply gemacht und es klappt auf jeden Fall. Aber wieso meintest du, dass ich MathMatrix zurückgeben muss? War das darauf bezogen, falls ich die Aufgabe mit deiner 2. Möglichkeit löse (also jedes Mal ein neues Matrix objekt erstellen?)
 
Z

zDieTaschenlampe

Aktives Mitglied
Das Ergebnis eine Matrix-Multiplikation oder Addition ist doch eine Matrix? Also Matrix auch zurück geben :)

Mir gehts um die Frage, ob ich MathMatrix (also das objekt) zurückgeben muss oder ob es so passt, wie ich es getan habe. Ich hab quasi einen int[][] zurückgeben, der ja qausi meine Matrix ist. Verstehst du was ich meine ?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Mir gehts um die Frage, ob ich MathMatrix (also das objekt) zurückgeben muss oder ob es so passt, wie ich es getan habe. Ich hab quasi einen int[][] zurückgeben, der ja qausi meine Matrix ist. Verstehst du was ich meine ?
MathMatrix ist eine Matrix. int[][] ist einfach nur ein 2-dimensionales-int-Array, aber keine Matrix :)
 
Z

zDieTaschenlampe

Aktives Mitglied
MathMatrix ist eine Matrix. int[][] ist einfach nur ein 2-dimensionales-int-Array, aber keine Matrix :)
Du findest meine Lösung also nicht legitim ? Ich versteh aber nicht ganz, wie du dir das vorstellst mit dem Rückgabetyp MathMatrix ? Soll ich dann am Ende ein neues Objekt erstellen und das returnen ?
 
Z

zDieTaschenlampe

Aktives Mitglied
Ja, deine Lösung fände ich nicht legitim.


Ja, genau.

Aber damit mach ich mir das Leben doch unnötig schwer, da dadurch das Weitere rechnen sich unnötig erschwert, da ich dann es mit Matrix Objekten zutun habe, statt mit int[][] Arrays. Dann passen meine Methoden doch auch nicht mehr. Denn im add und muliply wird eine int[][] als Paramter mitgegeben oder ist das auch falsch ?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Dann passen meine Methoden doch auch nicht mehr. Denn im add und muliply wird eine int[][] als Paramter mitgegeben oder ist das auch falsch ?
Darauf hat dich @fhoffmann schon hingewiesen: :)
Und wäre es nicht sinvoller, beispielsweise folgende Methode zu schreiben:
Java:
public Matrix multiply(Matrix other)
statt
Java:
public int[][] multiply(int[][] other)


Aber damit mach ich mir das Leben doch unnötig schwer, da dadurch das Weitere rechnen sich unnötig erschwert, da ich dann es mit Matrix Objekten zutun habe, statt mit int[][] Arrays.
Andersrum, mit int-Arrays machst du es dir schwerer ;)

Wenn deine Methode auch eine Matrix entgegen nimmt, kannst du sowas schreiben: a.multiply(b).add(c.multiply(d)), wenn du direkt Arrays benutzt, wirst du immer zwischen verschiedenen Dingen konvertieren müssen :)
 
F

fhoffmann

Top Contributor
Denn im add und muliply wird eine int[][] als Paramter mitgegeben oder ist das auch falsch ?
Du solltest den Metoden eine MathMatrix als Parameter mitgeben.

Und dazu wäre auch möglicherweise ein weiterer Konsruktor hilfreich:
Java:
public MathMatrix(int zeilenAnzahl, int spaltenAnzahl)
 
Zuletzt bearbeitet:
Z

zDieTaschenlampe

Aktives Mitglied
Okey das kann ich dann noch easy abändern, aber hat wer eine Ahnung wie ich die show Methode hinbekomme ? Ich hab das bisher :

Code:
public void show() {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                Terminal.printLine(matrix[i][j]);
            }
        }
    }
Das liefert die richtigen Zahlen, aber die falsche Darstellung, da jede Zeile in eine neue Zeile gepackt wird. Tips wie ich das umgehen kann? Nicht verwirren lassen, das terminal entspricht dem system.out.println
 
F

fhoffmann

Top Contributor
Da sind wir wieder bei deiner ursprüglichen Frage: Wie soll ich toString implementieren? Das geht so (ungetestet):
Java:
   public String toString() {
        String s = "";
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                s += String.format(%5d ", matrix[i][j]); // hinzufügen (+=)
           }
           s += "/n": // Zeielenumbruch
        }
        return s;
    }
 
Zuletzt bearbeitet:
Z

zDieTaschenlampe

Aktives Mitglied
Da sind wir wieder bei deiner ursprüglichen Frage: Wie soll ich toString implementieren? Das geht so (ungetestet):
Java:
   public String toString() {
        String s = "";
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                s += String.format(%5d ", matrix[i][j]); // hinzufügen (+=)
           }
           s += "/n": // Zeielenumbruch
        }
        return s;
    }
Erstmal danke für die Antwort, aber ich hatte ja schon eine funktionierende toString Methode, die so aussieht :

Code:
public String toString() {
        StringBuilder builder = new StringBuilder();
        for (int[] m : matrix) {
            for (int i : m) {
                builder.append(i).append(" ");
            }
            builder.append("\n");
        }
        return builder.toString();
    }

Die Darstellung gelingt dann auch, wenn ich m mauell printe, aber sobald ich in der show Methode folgendes versuche :

Code:
public void show() {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                Terminal.printLine(matrix[i][j]);
            }
        }

    }

dann wird die toString methode nicht aufgerufen aber wieso nicht ?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Wenn du irgendein Objekt print’est wird dessen toString aufgerufen, du machst das aber nur mit ints.
In show brauchst du nur eine einzige Zeile, reicht der Hinweis?

In welcher Klasse liegt show eigentlich?
 
Z

zDieTaschenlampe

Aktives Mitglied
Wenn du irgendein Objekt print’est wird dessen toString aufgerufen, du machst das aber nur mit ints.
In show brauchst du nur eine einzige Zeile, reicht der Hinweis?

In welcher Klasse liegt show eigentlich?

Ja dann war es mir doch klar, dass da mein Matrix objekt rein muss, aber es hängt trotzdem noch irgendwo, denn wie mach ich das. Wie folgt ist es falsch :
Code:
Terminal.printLine(MathMatrix()); // irgendwie muss hier die Matrix rein, aber wie ?

show liegt in der Matrix klasse und ist eine der 3 Methoden, die ich implementieren muss.
 
Z

zDieTaschenlampe

Aktives Mitglied
Oder MUSS ich doch alle Methoden ändern, sodass eine Matrix jedes mal erzeugt wird und zurückgegeben wird. Diese dann als Attribut speichern und das dann für show benutzen ?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
show liegt in der Matrix klasse
Show soll nicht in der Matrix-Klasse stehen:
In der Matrix-Klasse soll keine Ein- oder Ausgabe stattfinden.


Oder MUSS ich doch alle Methoden ändern, sodass eine Matrix jedes mal erzeugt wird und zurückgegeben wird.
Ja, jede Methode muss ein Matrix-Objekt zurück geben, kein int-Array.


Diese dann als Attribut speichern und das dann für show benutzen ?
In der Matrix selber sollte es nur ein Attribut geben, das eine int-Array, was im Konstruktor zugewiesen wird.
Ins Blaue geraten soll Show vermutlich eine Matrix als Parameter haben.
 
Z

zDieTaschenlampe

Aktives Mitglied
Show soll nicht in der Matrix-Klasse stehen:



Ja, jede Methode muss ein Matrix-Objekt zurück geben, kein int-Array.



In der Matrix selber sollte es nur ein Attribut geben, das eine int-Array, was im Konstruktor zugewiesen wird.
Ins Blaue geraten soll Show vermutlich eine Matrix als Parameter haben.
Wenn schon nicht in der Matrix klasse stehen soll oder darf, wo soll das sonst hin? In die Klasse mit der main Methode oder was ?

Und wer lesen kann ist klar im Vorteil xD, denn du hast Recht. show bekommt eine Matrix als paramter, d.h für mich ich muss jetzt erstmal alle Methoden umschreiben
 
Z

zDieTaschenlampe

Aktives Mitglied
Ich weiß, aber nicht ganz wie die neue Add methode aussehen soll. Also ich denke ich habs fast, aber kannst du mir kurz aushelfen :

Code:
public MathMatrix add1(Mathmatrix mathmatrix) {
        int[][] sum = new int[matrix.length][matrix[0].length];

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                sum[i][j] = matrix[i][j] + secondMatrix[i][j];  // Hier passt es jetzt nicht, secondMatrix war noch der int[][] von vorher

            }
        }
        return new MathMatrix(sum);
    }

Edit :
Hast du dir es so vorgestellt ? So sollte es doch passen
Code:
public MathMatrix add1(MathMatrix mathmatrix) {
        int[][] secondMatrix = mathmatrix.getMatrix();
        int[][] sum = new int[matrix.length][matrix[0].length];

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                sum[i][j] = matrix[i][j] + secondMatrix[i][j];

            }
        }
        return new MathMatrix(sum);
    }

Edit 2.0 : Jetzt bin an genau dem Punkt, den ich vorhin angesprochen habe. Ich erzeuge zwar eine neue Matrix die die Summe aus 2 Matrizen darstellt, aber die wird ja nirgendwo gespeichert oder seh ich das falsch ?
 
Zuletzt bearbeitet:
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Wenn schon nicht in der Matrix klasse stehen soll oder darf, wo soll das sonst hin? In die Klasse mit der main Methode oder was ?
Ja, in der Klasse wäre es passender.

Edit 2.0 : Jetzt bin an genau dem Punkt, den ich vorhin angesprochen habe. Ich erzeuge zwar eine neue Matrix die die Summe aus 2 Matrizen darstellt, aber die wird ja nirgendwo gespeichert oder seh ich das falsch ?
Naja, das ist an dir, die irgendwo zu speichern. Rufst du die Methode denn irgendwo auf?
 
Z

zDieTaschenlampe

Aktives Mitglied
Ja, in der Klasse wäre es passender.


Naja, das ist an dir, die irgendwo zu speichern. Rufst du die Methode denn irgendwo auf?

Oh ich hab ja nicht die ganze Aufgabe gepostet, also der Anfang war ja diese Methoden implementieren und der 2. Teil der Aufgabe lautet :
"Zusätzlich erstellen Sie eine Klasse Main, welche eine main ()-Methode enthält, in der die Ein und Ausgabe stattfindet. Die Eingabe findet via Kommandozeilenargumente (Command Line Arguments) statt. Die Kommandozeilenargumente können Sie aus dem args-Parameter der main ()-
Methode auslesen. Als erstes Argument wird die Operation angegeben (s.o.), danach folgen eine Matrix bei show bzw. zwei Matrizen bei add und multiply. Eine Matrix wird dabei als durch Semikolon separierte Liste von Zeilen dargestellt. Eine Zeile besteht aus 32-Bit-Ganzzahlen, die jeweils durch Kommata separiert werden. Sie können davon ausgehen, dass alle Eingaben syntaktisch und semantisch korrekt sind. Das Programm soll daraufhin das Ergebnis der Operation ausgeben. "

Also stand jetzt hab ich die neu erzeugt Matrix als Attribut in der Matrix klasse, aber ob das sinnvoll ist weiß ich noch nicht. Aufjeden Fall besteht jetzt mein Hauptproblem darin, dass ich nicht weiß wie ich die Kommandozeilenargumente so auslesen kann, dass es 1. ein int[][] ergibt, welches ich benutzen kann und 2. dieses Semikolon entferne.
Außerdem bin ich mir bezüglich show immernoch unsicher. Kommt das einfach in die main Methode ? Quasi so
Code:
 .... if (args[0].equals("show")){
 Terminal.println(args[1]);
 }
 
 ??? Das ist doch dann keine methode, sonern einfach eine Anweisung in der main Methode oder seh ich da was falsch
 
Z

zDieTaschenlampe

Aktives Mitglied
Ich verstehe immernoch nicht, wie die Methoden add und multipy mit Matrix objekten funktionieren soll bzw wie die auszusehen haben, denn das was ich habe klappt so nicht, egal was ich tue.

Meine Methoden nur mit den int[][] hingegen klappt aber kann mir bitte wer aushelfen xD

Edit : Nevermind. Ich glaube ich hab verstanden, was ihr meint. Also die Methoden laufen, aber die Probleme aus meinem Beitrag davon mit dem Auslesen von den Werten aus der Kommandozeile und das parsen davon bereitet mir Kopfschmerzen
 
Zuletzt bearbeitet:
Z

zDieTaschenlampe

Aktives Mitglied
Das folgende ist oder sollte die grobe Struktur der main Klasse mit main Methode sein, aber wie gesagt, wie parse ich bitte ein mehrdimensionales Array ? Wenn ich das habe, sollte eigentlich alles passen.
Code:
package uebungsblattTwo;

import edu.kit.informatik.Terminal;

public class MainMatrix {

    public static void main(String[] args) {

        int[][] firstMatrix = args[1];
        int[][] secondMatrix = args[2];
        MathMatrix mathmatrix1 = new MathMatrix(firstMatrix);
        MathMatrix mathmatrix2 = new MathMatrix(secondMatrix);

        if (args[0].equals("add")) {
            mathmatrix1.add1(mathmatrix2);
        } else if (args[0].contentEquals("multiply")) {
            mathmatrix1.multiply1(mathmatrix2);

        } else if (args[0].contentEquals("show")) {
            Terminal.printLine(firstMatrix);
        }
    }
}
 
F

fhoffmann

Top Contributor
Java:
int[][] firstMatrix = args[1];
args[1] ist ein String - es kann nicht automatisch in ein int[][] umgewandelt werden.
 
Z

zDieTaschenlampe

Aktives Mitglied
Java:
int[][] firstMatrix = args[1];
args[1] ist ein String - es kann nicht automatisch in ein int[][] umgewandelt werden.

Ja ist mir schon klar, aber danach frag ich euch doch. Mir ist schon klar, dass ich das Kommandozeilenargument parsen muss, aber wie parse ich das bitte bei nem mehrdimensionalen Array ?
args[0] ist einfach, denn das ist einfach immer der Befehl und das ist einfach zu übernehmen, aber wie übersetze ich beispielsweise folgendes : 1 , 2 ; 0,3 3 , 4 ; 3 , 4 ? Das semikolon trennt die jeweiligen Zeilen der Matrix und die leertaste unterscheidet die 2 Matrizen voneinader, aber wie parse ich das?
Ich brauche sicherlich den .split Befehl, aber wie gesagt ich weiß leider nicht wie ich so eine Beispieleingabe übersetzen/parsen kann in ein int[][] das ich benutzen kann
 
F

fhoffmann

Top Contributor
Vergiss doch erst einmal die Eingabe über die Konsole!
Probiere, die Klasse MathMatrix sauber zu schreiben
und teste sie mit festen Eingaben in der Main-Funktion.
 
Z

zDieTaschenlampe

Aktives Mitglied
Vergiss doch erst einmal die Eingabe über die Konsole!
Probiere, die Klasse MathMatrix sauber zu schreiben
und teste sie mit festen Eingaben in der Main-Funktion.

Hab ich doch schon und es funktioniert auch alles xD. Hab doch schon paar Posts vorher gesagt, dass ich die Methoden umgeschrieben habe, sodass beim Rechnen immer eine MathMatrix zurückgegeben wird . Deswegen brauch ich nur noch die main methode und das einzige was mir da fehlt ist das parsen der Kommandoargumente
 
F

fhoffmann

Top Contributor
und das einzige was mir da fehlt ist das parsen der Kommandoargumente
Dann musst du erst einmal einen "Vertrag" mit dir selber machen, wie du die Matrixelemente eingeben willst.

Wahrscheeinlich sollen die Elemente in einer Zeile durch Leerzeichen (oder durch Tabulatoren?) getrennt sein.
Mehere Zeilen sollen durch einen "Zeilenumbruch" (möglicherweise "0D0A") getrennt werden. Aber es wäre natürlich ebenso möglich, unterschiedliche Zeilen durch "X" zu trennen.

Was willst du?
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Z

zDieTaschenlampe

Aktives Mitglied
Wie MrBrown schon gesehen hat und gerade geschrieben hat, ist es schon vorgegeben. " Eine Matrix wird dabei als durch Semikolon separierte Liste von Zeilen dargestellt. Eine Zeile besteht aus 32-Bit-Ganzzahlen, die jeweils durch Kommata separiert werden "

Aber jetzt nochmal zur Frage wie parst man das ? Normale Integers sind ja einfach mit Integer.parseint(args[..]) zu parsen. Vor kurzem hab ich auch gelernt, wie man ein Array parst, aber wie man das jetzt macht, weiß ich einfach nicht. Deswegen brauch ich eure Hilfe bitte
 
Z

zDieTaschenlampe

Aktives Mitglied
Was hast du denn dort gelernt?

Wenn ich beispielsweise bei der Kommandozeilenargumente 1, 2 ,3 ,4 ,5 .... mitgeben, dann kann ich einfach mit einer schleife :
Code:
for (int i = 0; i < args.length; i++) {
            Integer.parseInt(args[i]);
        } // Diese Werte dann einfach noch speichern oder direkt weiterverwenden , aber wie soll das an meinem Bsp mit mehrdimensionalen Arrays gehen
 
Z

zDieTaschenlampe

Aktives Mitglied
Und wie man mit Strings arbeitet hast du doch sicher auch gelernt?
Ich versteh leider nicht, worauf du hinaus willst :(

Ansatz sieht doch so aus :
Code:
public static void main(String[] args) {

        String[] firstmatrix = args[1].split(";");
       
        // Jetzt trennt er bei der Einagbe : 1,2;0,3 1,2 und 0,3 voneinander und speichert diese in mein String array oder ?

Edit: Falls der Ansatz stimmt, dann ist die Länge meines String Arrays ja theoretisch die Zeilenanzahl meiner Matrix
 
Z

zDieTaschenlampe

Aktives Mitglied
Wieso funktioniert das folgende aber nicht?
Code:
public static void main(String[] args) {

        String[] firstmatrix = args[1].split(";");
        
        for(int i=0; i< firstmatrix.length; i++) {
            Terminal.printLine(firstmatrix[i]);
        }

Will nur kurz sehen, ob der String Array richtig gesplitted wurde, aber krieg eine ArrayOutOfBounds
 
Z

zDieTaschenlampe

Aktives Mitglied
Wieso funktioniert das folgende aber nicht?
Code:
public static void main(String[] args) {

        String[] firstmatrix = args[1].split(";");
       
        for(int i=0; i< firstmatrix.length; i++) {
            Terminal.printLine(firstmatrix[i]);
        }

Will nur kurz sehen, ob der String Array richtig gesplitted wurde, aber krieg eine ArrayOutOfBounds
Edit : Vergiss es. ich bin hohl
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Matrix Klasse Java Basics - Anfänger-Themen 4
W Matrix Klasse Java Basics - Anfänger-Themen 5
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 2
M Matrix Java Basics - Anfänger-Themen 3
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
B Dünn besetzte Matrix Java Basics - Anfänger-Themen 7
Al3xand3r01 Matrix, Nachbarelemente Java Basics - Anfänger-Themen 16
E Rückwärtsmultiplikation einer invertierten matrix Java Basics - Anfänger-Themen 2
U Dreiecks-Matrix mit Array Java Basics - Anfänger-Themen 3
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
B Diskrete Faltung (Matrix) Randfälle Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
N Quadratische Matrix inkl Summe Java Basics - Anfänger-Themen 8
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
O Matrix, Vektor Java Basics - Anfänger-Themen 9
H 2D Array, Symmetrische Matrix Java Basics - Anfänger-Themen 12
S Matrix spaltenweise befüllen Java Basics - Anfänger-Themen 1
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
C Matrix erstellen Spaltensumme, Zeilensumme, Diagonale Java Basics - Anfänger-Themen 1
S Methoden Transponierte Matrix Java Basics - Anfänger-Themen 3
N Vererbung Submatrix mit Verweis auf Matrix erstellen Java Basics - Anfänger-Themen 9
J Matrix erstellen Java Java Basics - Anfänger-Themen 7
B Transponiertes Matrix Java Basics - Anfänger-Themen 12
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
C Matrix transponieren - Hilfe Java Basics - Anfänger-Themen 1
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
L Matrix(Array) minimieren... Java Basics - Anfänger-Themen 9
E Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 7
S eingegebene Matrix anzeigen Java Basics - Anfänger-Themen 4
J Matrix für Schachbrett Java Basics - Anfänger-Themen 6
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
G Bilddaten in Matrix umwandeln Java Basics - Anfänger-Themen 1
T Eine String Matrix erstellen die eine boolean Funtion verwendet Java Basics - Anfänger-Themen 10
O Matrix Multiplizieren Java Basics - Anfänger-Themen 4
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
T Matrix auf Symmetrie überprüfen Java Basics - Anfänger-Themen 6
V Matrix Transponieren Java Basics - Anfänger-Themen 3
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
W Zweidimensionale Arrays als Matrix ausgeben Java Basics - Anfänger-Themen 8
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
O Matrix ordnen Java Basics - Anfänger-Themen 4
M Symmetrische Matrix Java Basics - Anfänger-Themen 2
W Methoden Rang von einer Matrix mit Gauss Java Basics - Anfänger-Themen 0
U Matrix Subtrahieren Java Basics - Anfänger-Themen 12
E Input/Output convert string to two dimensional char and output = matrix Java Basics - Anfänger-Themen 2
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
I Matrix überprüfen Java Basics - Anfänger-Themen 8
Z Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 13
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
N Matrix/Vektoren Java Basics - Anfänger-Themen 3
N Matrix Java Basics - Anfänger-Themen 14
T Methode, die eine 2 dimensionale Matrix kopiert. Java Basics - Anfänger-Themen 16
J Matrix Java Java Basics - Anfänger-Themen 3
D 2 mehrdimensionale Matrix einlesen Java Basics - Anfänger-Themen 2
A N*N Matrix Determinante berechnen Java Basics - Anfänger-Themen 47
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
O Java Matrix mal Matrix über while Schleife... Java Basics - Anfänger-Themen 10
O Transponieren einer Matrix per While-Schleife Java Basics - Anfänger-Themen 3
M Matrix - Probelm Java Basics - Anfänger-Themen 7
O 2D Matrix befüllen mit geraden Zahlen!? Java Basics - Anfänger-Themen 14
J Java Matrix befüllen Java Basics - Anfänger-Themen 5
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
F Matrix Java Basics - Anfänger-Themen 11
E Array als Matrix Java Basics - Anfänger-Themen 21
G OOP Parameter Matrix Java Basics - Anfänger-Themen 2
B Maske an eine Matrix anpassen Java Basics - Anfänger-Themen 5
W Matrix übergeben Java Basics - Anfänger-Themen 7
T Matrix transponieren Java Basics - Anfänger-Themen 17
W Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.? Java Basics - Anfänger-Themen 3
M String Datei in Float-Matrix umwandeln Java Basics - Anfänger-Themen 8
D Problem: Werte eine Matrix vergleichen! Java Basics - Anfänger-Themen 5
B Matrix Java Basics - Anfänger-Themen 2
Semox Matrix multiplizieren Java Basics - Anfänger-Themen 4
N Matrix an toString Java Basics - Anfänger-Themen 7
C Diagonale in einem NxN Matrix Java Basics - Anfänger-Themen 6
F Einträgen von Matrix zu sotieren Java Basics - Anfänger-Themen 2
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5
J Spezielle Matrix ausgeben ! Java Basics - Anfänger-Themen 8
S Problem bei Matrix Addition Java Basics - Anfänger-Themen 5
F matrix werte übergeben Java Basics - Anfänger-Themen 5
M Hauptdiagonale Matrix berechnen Java Basics - Anfänger-Themen 6
M Klassenerstellung für Matrix mit Rechenopperationen Java Basics - Anfänger-Themen 42
D Matrix .bat datei erstellen und öffnen Java Basics - Anfänger-Themen 2
J Matrix ausgeben Java Basics - Anfänger-Themen 9
N Matrix Matrix Produkt Java Basics - Anfänger-Themen 7
N prüfe ob etwas in einer Matrix steht... Java Basics - Anfänger-Themen 14
L rechtecke zeichnen anhand von matrix Java Basics - Anfänger-Themen 27
J Matrix aus Datei einlesen mit StreamTokenizer Java Basics - Anfänger-Themen 3
K Transponiere Matrix Java Basics - Anfänger-Themen 4
Z mehrdimensionales Array, Matrix "invertieren" Java Basics - Anfänger-Themen 4
P Initialisierung einer 5*5 Matrix mit best. Werten Java Basics - Anfänger-Themen 2
B Matrix package ? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige


Oben