java Matrix als klasse (array)?

3 Antworten

Erstmal sehe ich einige Fehler. Wenn die Methode "Matrix" einen Wert zurückgeben soll, musst du das deklarieren. Außerdem fehlt dann entsprechend der return und ich vermute, dass du die Methode als "static" angeben musst.

"System.out.println(marray);"

Dort versuchst du eine Methode aufzurufen, ohne die Parameterangabe. Oder aber dir fehlen Anführungsstriche.

"Matrix(){}"

Was versuchst du da?

Das was du machst: Du erstellst eine Klasse mit dem Namen Matrix. Im Konstruktor der Klasse Matrix erstellst du eine zweidimensionale Array als lokale Variable, die nicht weiter verwendet wird.

Anschließend Rufst du den Konstruktor deiner Matrix Klasse in der Main Methode auf. Und das ist bereits der Denkfehler: Dadurch dass sich die lokale Variable im Konstruktor befindet, wird nicht die gleich die ganze Klasse zu einer zweidimensionalen Array.

Wenn deine Klasse eine zweidimensionale Array 'kreieren' soll, bist du garnicht so weit weg von der Lösung.

Deklariere eine zweidimensionale Array als Instanz-Variable.

Im Konstruktor weist du dieser Instanz-Variable dann deine neue Array zu (mit Anzahl Zeilen und Spalten).

Anschließend nimmst du noch einen Getter der dir die zweidimensionale Array zurück liefert.

leonardomessi 
Fragesteller
 10.12.2015, 20:00

Instanz-Variable? Könntest du das bitte etwas erläutern.

Und was ist ein Getter?

0
Gegengift  10.12.2015, 20:14
@leonardomessi

Das Schöne an grundlegenden Grundlagen ist, dass einem da Millionen Foreneinträge, Tutorials, Bücher etc weiter helfen. Sowas sollte man sich erst mal aneignen. Zumindest erst mal lesen und dann die Fragen stellen.

0
KnusperPudding  10.12.2015, 20:15
@leonardomessi

Eine Instanz-Variable ist eine nicht-statische Variable innerhalb einer Klasse, die eine Gültigkeit innerhalb einer Instanz hat.

private Matrix[][] matrix;

ein Getter ist eine Methode, welche eine Instanz-Variable zurückliefert.

public Matrix[][] getMatrix() {
    return matrix;
}
0
for (int i=0; i<3; i++){
   
System.out.println(marray);
}

Warum gibts du 3 mal das gleiche aus (nämlich den Namen des Objekts marray)?

leonardomessi 
Fragesteller
 10.12.2015, 19:19

überreste vom test gewesen.

0
Gegengift  10.12.2015, 19:22
@leonardomessi

Ja und wo  ist dann der Code, der hier beurteilt werden soll - nämlich die Verwendung der Klasse?

0
leonardomessi 
Fragesteller
 10.12.2015, 19:29
@Gegengift

Das ist die Frage. :DDDDD

Mein aktuelles Problem ist, ich will ein 2 dimensionales Array mithilfe einer Klasse kreieren. Und das klappt mit dem gegebenen Code nicht.

Das weitere programmieren in der Main ist dafür unwichtig.

0
Gegengift  10.12.2015, 19:43
@leonardomessi

Alles klar.

Matrix [][] marray = new Matrix[columns][rows];

Du erstellst also ein Matrix Objekt, das ein zweidimensionales Array enthält, in dem man wiederum Matrix Objekte speichern kann. Sinn?

Mein aktuelles Problem ist, ich will ein 2 dimensionales Array mithilfe einer Klasse kreieren

Wenn es darum geht ein Array durch eine Klasse zu kapseln, dann initialisierst du im Konstruktor nur ein einfaches int-Array. Dieses int-Array muss ein Feld in der Klasse sein. Dann kannst du noch Methoden definieren, um darauf zuzugreifen.



0
leonardomessi 
Fragesteller
 10.12.2015, 19:57
@Gegengift

Ich glaube es kommt so ein bisschen raus, das ich noch nicht ganz vertraut mit der Materie bin.

Alles was ich will, ist ein Array zu konstruieren. Und zwar mit einer Klasse.

Zwei Inputs für die Größe des Arrays. Und daraus soll dann das Programm ein Array erstellen.

Ich weis einfach nur nicht, wie ich das bewerkstelligen kann.

Liegt der Fehler in der main oder in der Klasse?

Was muss ich in der Main eingeben, damit er das macht was ich will?

0
Gegengift  10.12.2015, 20:00
@leonardomessi

Im Konstruktor erstellst du ja korrekterweise das Array. Nur dass es kein Array für Matrix-Objekte sein soll, sondern ein Array für einfache int-Werte.

Du erstellst also ein int-Array. Und speichern tust du das in einer Variablen der Klasse (die musst du noch anlegen)

0
Etter  10.12.2015, 20:09

"nämlich den Namen des Objekts marray"

Ich bin mir sicher, dass man mit Aufruf einer Methode innerhalb einer Konsolenausgabe nicht den Namen ausgibt (außer vll. man würde das in Anführungsstriche fassen).

Auch wenn ich sagen muss, dass da ein Haufen Fehler im Quellcode ist (da fehlt z.B. die Parameterübergabe oder wenn es "marray" ausgeben soll, dann fehlen die Anführungsstriche).

0
Gegengift  10.12.2015, 20:12
@Etter

Ich bin mir sicher, dass man mit Aufruf einer Methode innerhalb einer Konsolenausgabe nicht den Namen ausgibt

Doch dabei wird halt automatisch die toString-Methode des Objekts aufgerufen. Und die gibt in der Standardimplementierung den vollqualifizierten Namen des Objekts zurück.

0
Etter  10.12.2015, 20:16
@Gegengift
public class Test {
public static void main(String[] args) {
System.out.println(Matrix(1,2));
}
public static int Matrix(int test1, int test2) {
return (test1+test2);
}
}

Dann dürfte das ja auch nicht funzen. Ausgabe ist aber 3. Vll. reden wir auch aneinander vorbei.

Wenn man jetzt die Parameterübergabe beim Syso weglässt, dann bekommt man eine Fehlermeldung.

0
Gegengift  10.12.2015, 20:23
@Etter

Du übergibst ja kein Objekt sonder einen int-Wert.

Oben wird aber ein Objekt der Klasse Matrix übergeben (bzw. ein Array-Objekt mit Matrix Objekten). Und wenn man ein Objekt dem Konsolenaufruf übergibt, dann wird die toString-Methode aufgerufen und die gibt den Namen des Objekts zurück.

Z.B. so etwas:

[[LMyClass$Matrix;@74a14482
1