Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe eine Test Klasse geschrieben die eine Matrix beschreibt,
mit dieser soll jetzt in der Klasse Matrix gerechnet werden aber ich
weiß nicht wie ich das mit den get/set methoden und so machen soll.
So siehts momentan aus:
Test Klasse:
Java:
public class Test {
public static void main(String[] a) {
double matrix[][] = new double[3][3];
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
}
}
Matrix Klasse:
Java:
public class Matrix {
private double[][] mat;
private int zeilen, spalten;
public Matrix(double[] [] mat){
this.mat = mat;
this.zeilen = mat.length;
this.spalten = mat[0].length;
}
public void elemente(int i, int j, double e) {
mat[i][j] = e;
}
}
Der Ansatz ist aber bestimmt vollkommen falsch :/.
anstatt dem was ich da stehen habe?
und ich frag jetzt lieder schonmal wie das dann mit der toString MEthode geht auch wenn
ich da noch lange nicht bin?
ich weiß nicht wieviel Sinn eine toString() Methode bei einer Matrix macht. du müsstest halt durch das 2D Array loopen und einen String mit allen Werten zusammensetzen. Es könnte auch eine Methode toStringArray() geben, die ein StringArray mit den Zeilen der Matrix zurückgibt aber am sinnvollsten ist für mich eine matrixPrint() Methode, die die Matrix ganz einfach in einem schönen Format auf der Console ausgibt.
grüße
nrg
Ich hab leider immer noch nicht richtig verstanden wie ich die Matrix in der Test Klasse erstellen muss um damit dann in der Matrix Klasse zu rechnen.
hab nun folgendes Probiert:
Test Klasse:
Java:
public class Test {
public static void main(String[] a) {
double mat[][] = new double[1][1];
mat[0][0] = 1;
mat[0][1]= 2;
System.out.println(mat);
}
}
Matrix Klasse:
Java:
public class Matrix {
public int[][] mat;
private int zeilen, spalten;
private int groesse;
int determinante;
public Matrix(int[][] matrix){
this.mat = mat;
this.zeilen = mat.length;
this.spalten = mat[0].length;
}
//soll determinante Berechnen
// noch nicht fertig
public int det(int matrix[][]) {
if(mat.length == 1) {
determinante = mat[0][0];
return determinante;
}
else if (mat.length > 1) {
}
return determinante;
}
}
Das problem is nur das ich nicht weiß in welcher Form die Matrix in der
Test Klasse angegebn werden muss damit ich später damit rechnen kann,
dasss funktioniert nicht so wie ich denke
public class Test {
public static void main(String[] a) {
double mat[][] = new double[1][1];
mat[0][0] = 1;
mat[0][1]= 2;
Matrix matrix = new Matrix(mat); // <-- hier das Matrixobjekt
matrix.det();
}
}
deine methode det, ich denke das wird die determinante, muss keinen parameter haben, weil sie eine methode von matrix ist, oder du machst die methode static dann kannst du via Matrix.det(mat); darauf zugreifen.
// In deiner Test Klasse
public static void main(String[] args) {
double mat[][] = new double [2][2]; // hier stellst du ja dein matrix array bereit. (2x2 Matrix)
// Matrixfelder belegen:
mat[0][0] = 1;
mat[0][1] = 2;
mat[1][0] = 3;
mat[1][1] = 4;
// Ein Matrixobjekt erzeugen
Matrix matrix = new Matrix(mat); // Erzeugt ein Objekt deiner Klasse Matrix, ruft den Konstruktor Matrix(double[][] mat) auf.
// Aufruf einer Methode der Klasse Matrix:
matrix.det();
}
Java:
// In deiner Klasse Matrix
public int det() {
// hier hast du nun zugriff auf alle variablen, der Klasse Matrix. Weil ein Objekt von Matrix erzeugt wurde und dadurch auch dein internes Array mat gesetzt wurde kannst du damit arbeiten.
...
}
eine Alternative wäre:
Java:
// in deiner Klasse Matrix
public static int det(double[][] mat) {
// Hier wird nun ein 2D Array übergeben und du kannst diesen inhalt verwenden
}
dann ist der aufruf in deiner Test Klasse allerdings:
Java:
// in deiner Test Klasse in der main-Methode:
double mat[][] = new double [2][2]; // hier stellst du ja dein matrix array bereit. (2x2 Matrix)
// Matrixfelder belegen:
mat[0][0] = 1;
mat[0][1] = 2;
mat[1][0] = 3;
mat[1][1] = 4;
// Aufruf der determinaten Funktion:
Matrix.det(mat); // Aufruf der Methode det ohne ein Objekt von Matrix erzeugt zu haben.
Ich bekomm da aber kein Ergebnis raus also erstmal nur mit na 1*1 matrix
Java:
public int det() {
if(mat.length == 1) {
determinante = mat; // was muss ich denn hier zurückgeben um ein ergebnis zu bekommen??
return determinante;
}
else if (mat.length > 1) {
}
So habs jetzt hinbekommen dass ich auch mit einer 2x2 Matrix rechnen kann.
Aber auch nur einer! kann man das auch machen das mehrere hintereinander berechnet werden?
Java:
public class Matrix {
public int[][] mat;
int determinante = 0;
public Matrix(int[][]mat){
this.mat = mat;
}
public int det() {
if(mat.length == 1) {
determinante = mat[0][0];
System.out.println(determinante);
}
if(mat.length == 2) {
determinante = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
System.out.println(determinante);
}
return determinante;
}
}
Java:
public class Test {
public static void main(String[] a) {
int mat[][] = new int[2][2];
mat[0][0] = 1;
mat[0][1] = 5;
mat[1][0] = 1;
mat[1][1] = 8;
Matrix matrix = new Matrix(mat);
matrix.det();
}
}
du kannst keine zwei Variablen mit dem gleichen Namen deklarieren.
du kannst einer Variable aber einen neuen wert zuweißen (falls primitiv) oder in deinem fall neu referenzieren.
Java:
int mat[][] = new int[2][2];
.....
mat = new int[2][2];
oder du lässt das Zweite
Java:
int mat[][] = new int[2][2];
einfach ganz weg
das sollte deinen Fehler erstmal beheben
edit: die Namen, die du deinen 2 Objekten von deiner Matrixklasse gibts sind auch gleich. Diese solltest du allerdings nicht neu referenzieren (sonst ist dein erstes Objekt ein Fall für den gc) sondern deiner zweiten Referenzvariable einen anderen Namen geben (in deinem Fall z.B. matrix2)
ich kenne zwar deinen aktuellen quellcode nicht, aber da du ja mit dem 2d array arbeitest kannst du für die ausgabe einfach 2 for-schleifen verwenden.
hierbei zählt die äußere for-schleife die zeile, die inner die spalte. wenn die innere schleife einmal durchgelaufen ist, wird dann die äußere die zeile um eine stelle weiter nach unten rücken, die innere daraufhin wieder spalte pro spalte die zahlen eintragen.
ich hoffe ich habe mich nicht vertan, welche klammer beim 2d array für zeile und welche für spalte steht, ansonsten bei der ausgabe einfach und [p] vertauschen