Objekt einer Methode eines anderen Objektes übergeben

P3ngu

Neues Mitglied
Hallo zusammen,

ich habe ein Programm das Matrizen als Objekte speichert und in der Main Methode erstellt und deklariert.
Nun habe ich die Matrix 1 und würde gerne mit dieser die Methode add() aufrufen und den Parameter Matrix 2 übergeben.
Das hab ich in der Main Methode wie folgend gelöst:

m.add(m);

Die Methode add() soll nun die Summe des Inhaltes aus Matrix 1 und Matrix 2 zusammen rechnen und als rückgabe Wert an die MainMethode übergeben.
Problem nun, das Ergebnis besteht immer aus den Summen der Matrix 2 (deren Summe ist immer 5 da nur 5 drinne steht). Ich denke an dieser stelle fehlt mir das Wissen um Matrix 1 direkt anzusprechen. In der add() Methode habe ich versucht die Matrizen mit this.matrix und other.matrix zu differenzieren, jedoch scheint das nicht zu funktionieren...

Hier ist meine Main-Methode:

Java:
public class Matrix {
    private static int m;
    private static int n;
    private double x;
    static double[][] matrix;
    public static void main(String[] args) {
        Matrix m = new Matrix(10,5);
        Matrix m1 = new Matrix(5,5);
        m.setValue(0,0,1.553);
        m1.setValue(0, 0, 5.0);
        System.out.println(m.add(m1));
        
    }
    public Matrix(int m, int n) {
        this.m = m;
        this.n = n;
        matrix = new double[m][n];
        
    }

Hier die Methoden in denen ich meine Daten eingeben, ausgeben und berechnen kann:

Code:
    public static void setValue(int i, int j, double x) {
        
        matrix[i][j] = x;
    }
    public double getValue(int i, int j) {
        return matrix[i][j];
    }
    public double add(Matrix other) {
        
        double temp=0;
        for(int i=0;i<other.m;i++) {
            for(int j=0;j<other.n;j++) {
                temp=temp+other.matrix[i][j];
                System.out.println(temp);
            }
        }
        for(int k=0;k<this.matrix.m;k++) {
            for(int l=0;l<this.matrix.n;l++) {
                temp=temp+other.matrix[k][l];
                System.out.println(temp);
            }
        }
        return temp;
        
    }
    

}

Interessant könnte noch sein, dass wenn ich in der MainMethode m.SetValue durchführe, dann m1.setValue und dann die add Methode mit m.add(m) dann nimmt er trotzdem die zweite Matrix, was übersehe ich?
Anbei noch ein Bild der Ausgabe.
 

Anhänge

  • output.png
    output.png
    39,2 KB · Aufrufe: 0
Erst einmal hast Du hier keine Instanzvariablen sondern Klassenvariablen:
Java:
    private static int m;
    private static int n;
    static double[][] matrix;

Es gibt somit nur jeweils ein m, n und matrix - egal wie viele Instanzen der Klasse du erstellst. Wenn Du also Instanzvariablen haben willst, dann muss das static weg.

Und in einer Methode wie public double add(Matrix other) { kannst Du aus den Parameter mit other zugreifen und die Instanz, auf der die Methode aufgerufen wurde, mit this.

Somit könntest Du z.B. etwas schreiben wie:
this.matrix[0][0] = other.matrix[0][0];
nur um mal ein Beispiel zu bringen. Setzt aber natürlich voraus, dass matrix nicht mehr static ist!
 
Abgesehen von dem falschen 'static' halte ich deine add()-Methode für unschön, weil zu speziell, gelöst. Sie gibt die Summe aller Eigenwerte zweier Matrizen zurück. Genauso gut könntest du eine Methode sum() erstellen, welche nur die Summe der eigenen Matrix berechnet.
Die add() methode wäre dann sehr übersichtlich:
Java:
public double add(Matrix other) {
    return this.sum() + other.sum();
}
(wobei das this durchaus weggelassen werden kann.)
Der Methodenname add ist ebenfalls nicht glücklich gewählt, weil durch den Aufruf nichts am Inhalt des Objekts geändert wird, die Wortbedeutung dies aber erwarten läßt.
 
Wobei eine Addition von Matrizen doch nicht so eine Summe ist und das Ergebnis auch kein double ist. Es kommt eine Matrix heraus.

Also vom Ablauf her:
  • Check, dass beide Matrizen gleich groß sind
  • Neue Matrix erstellen mit dieser Größe
  • Nun wird für jede Position in der Ergebnis-Matrix die Felder der beiden anderen Matrix zusammen addiert.

 
Der Methodenname add ist ebenfalls nicht glücklich gewählt, weil durch den Aufruf nichts am Inhalt des Objekts geändert wird, die Wortbedeutung dies aber erwarten läßt.
Das sehe ich nicht so. Wäre es eine Addition von Matrizen, dann wäre das durchaus ok und genau so ist es ja auch bei anderen Klassen im Framework gelöst z.B. BigDecimal.add verändert das eigentliche Objekt auch nicht sondern addiert und gibt dann eine neue Instanz zurück.
 
Das sehe ich nicht so. Wäre es eine Addition von Matrizen, dann wäre das durchaus ok und genau so ist es ja auch bei anderen Klassen im Framework gelöst z.B. BigDecimal.add verändert das eigentliche Objekt auch nicht sondern addiert und gibt dann eine neue Instanz zurück.
Man sollte an der Stelle einfach mal erwaehnen dass "add" das Verb von "addition" ist. Also wie in "Zwei Zahlen addieren"/"To add two numbers".
 

Zurück
Oben