Hallo,
Ich sitze seid zwei Tagen an einer Übungsaufgabe die ich leider nicht komplett gelöst bekomme.
Mir wird ein Array voll mit Matrizen übergeben diese soll ich mit Mergesort sortieren.
Ich kann meinen Ansatz nicht Überprüfen da ich in der Main Methode in der Klasse Mergesort das Array das ausgegeben wird nicht verändern kann.
Der Compiler meckert das er die Variable nicht findet die ich in Z55 in der Klasse Mergesort versuche zu ändern.
Mein Problem ist wahrscheinlich noch umfassender deswegen wäre es nett wenn jemand mal über den Kompletten Code den ich geschrieben habe sehen könnte (letzte Klasse).
Diese Klasse ist vorgegeben und erzeugt ein Array voll mit Matrizen
Diese Klasse ist ebenfalls vorgegeben und soll das Sortierverfahren Testen
Das ist die Matrixklasse von der die Arrays abgeleitet sind und die Matrizen miteinander verglichen werden können.
Hier der Code für die Eigentliche Aufgabe, ich weiss nicht ob das Gesammtkonstrukt überhaupt Funktioniert es wäre also schön wenn hier mal jemand besonders drüberschauen könnte.
Vielen Dank, ich weiss das ist ne Menge Code aber im Grunde ist ja nur die letzte Klasse von belang.
Ich sitze seid zwei Tagen an einer Übungsaufgabe die ich leider nicht komplett gelöst bekomme.
Mir wird ein Array voll mit Matrizen übergeben diese soll ich mit Mergesort sortieren.
Ich kann meinen Ansatz nicht Überprüfen da ich in der Main Methode in der Klasse Mergesort das Array das ausgegeben wird nicht verändern kann.
Der Compiler meckert das er die Variable nicht findet die ich in Z55 in der Klasse Mergesort versuche zu ändern.
Mein Problem ist wahrscheinlich noch umfassender deswegen wäre es nett wenn jemand mal über den Kompletten Code den ich geschrieben habe sehen könnte (letzte Klasse).
Diese Klasse ist vorgegeben und erzeugt ein Array voll mit Matrizen
Java:
public class TestMatrix {
public static Matrix[] beispielMatrixArray() {
// erzeuge Matrix-Array mit 8 Elementen
Matrix[] matArr = new Matrix[8];
// 1. Matrix
double[][] werte0 = {{1, 1.5, 2}, {2, -2.5, 3}};
matArr[0] = new Matrix(werte0);
// 2. Matrix
double[][] werte1 = {{10, 5}, {5, 20}};
matArr[1] = new Matrix(werte1);
// 3. Matrix
double[][] werte2 = {{-3, -5}, {-1, 0}};
matArr[2] = new Matrix(werte2);
// 4. Matrix
double[][] werte3 = {{100, 50}, {-30, 200}};
matArr[3] = new Matrix(werte3);
// 5. Matrix
double[][] werte4 = {{-30, 0}, {0, 30}};
matArr[4] = new Matrix(werte4);
// 6. Matrix
double[][] werte5 = {{1, 1.5, 2}, {2, -2.5, 3}};
matArr[5] = new Matrix(werte5);
// 7. Matrix
double[][] werte6 = {{3, 1}};
matArr[6] = new Matrix(werte6);
// 8. Matrix
double[][] werte7 = {{10000}};
matArr[7] = new Matrix(werte7);
// gebe den Array mit 8 Matrizen zurueck
return matArr;
}
public static void matrixArrayAusgeben(Matrix[] matArr) {
for (int i=0; i<matArr.length; i++)
System.out.println(matArr[i]+"\n");
}
Diese Klasse ist ebenfalls vorgegeben und soll das Sortierverfahren Testen
Java:
public class TestMergesort {
public static void main(String[] args) {
// erzeugte 8-elementigen Array von Matrix-Objekten
Matrix[] matrixArray = TestMatrix.beispielMatrixArray();
System.out.println("Vor der Sortierung:");
TestMatrix.matrixArrayAusgeben(matrixArray);
// Aufruf der Sortier-Methode
Mergesort.sort(matrixArray);
System.out.println("Nach der Sortierung:");
TestMatrix.matrixArrayAusgeben(matrixArray);
}
}
Das ist die Matrixklasse von der die Arrays abgeleitet sind und die Matrizen miteinander verglichen werden können.
Java:
public class Matrix implements Comparable {
//Matrixarray
private double[][] array;
//Konstruktor
public Matrix(double[][] a){
array = a;
}
//toString Methode
public String toString(){
double x=0;
for(int i=0; i<array.length;i++){
System.out.println("\n");
for(int j=0; j<array[0].length;j++){
System.out.print(""+array[i][j]+" ");
x = x+array[i][j];
}
}
String k = String.valueOf(x);
return ("\n\nSumme der Elemente: "+k+"");
}
//Vergleichsmethode es wird die Summe der beiden Matrizen errechnet und voneinander Abgezogen
//kommt ein wert kleiner Null herraus ist die andere Matrix größer.
public int compareTo(Matrix andereMatrix){
double[][] a = andereMatrix.getarray();
double x=0;
for(int i=0; i<array.length;i++){
for(int j=0; j<array[0].length;j++){
x = x+array[i][j];
}
}
double y=0;
for(int i=0; i<a.length;i++){
for(int j=0; j<a[0].length;j++){
y = y+a[i][j];
}
}
int z = (int)x;
int u = (int)y;
return z-u;
}
//Get Methode
public double[][] getarray(){
return array;
}
}
Hier der Code für die Eigentliche Aufgabe, ich weiss nicht ob das Gesammtkonstrukt überhaupt Funktioniert es wäre also schön wenn hier mal jemand besonders drüberschauen könnte.
Java:
public class Mergesort {
// von aussen zugreifbare Sortier-Methode
public static void sort(Matrix[] matArr) {
aufspalten(matArr);
}
// Spaltet die übergebene Matrix-Liste solange bis es nichtmehr geht
public static void aufspalten(Matrix[] liste){
if(liste.length<=1){
// Abbruch
} else {
Matrix[] rechteListe = new Matrix[liste.length/2];
Matrix[] linkeListe = new Matrix[liste.length-(liste.length/2)];
for (int i =0;i<liste.length/2;i++){
rechteListe[i]=liste[i];
}
for (int j =0;j<liste.length-(liste.length/2);j++){
linkeListe[j]=liste[j];
}
merge(rechteListe,linkeListe);
}
}
// Sortiert und Verbindet die Teile
public static void merge(Matrix[] rechteListe, Matrix[] linkeListe){
Matrix[] neueListe = new Matrix[rechteListe.length+linkeListe.length];
int lz=0;
int rz=0;
int nz=0;
while(rz<rechteListe.length && lz<linkeListe.length){
if(rechteListe[rz].compareTo(linkeListe[lz])<0){
neueListe[nz]=rechteListe[rz];
rz++;
nz++;
} else {
neueListe[nz]=linkeListe[lz];
lz++;
nz++;
}
}
while(rz<rechteListe.length&&lz==linkeListe.length){
neueListe[nz]=rechteListe[rz];
rz++;
nz++;
}
while(rz==rechteListe.length&&lz<linkeListe.length){
neueListe[nz]=linkeListe[lz];
lz++;
nz++;
}
TestMergesort.matrixArray=neueListe;
}
}
Vielen Dank, ich weiss das ist ne Menge Code aber im Grunde ist ja nur die letzte Klasse von belang.