Java Matrix mal Matrix über while Schleife...

ohmp2007

Mitglied
Hallo,

Leute bin wieder dabei eine Matrix mal Matrix über eine while Schleife zu machen! Bekomme es aber net hin!

Java:
public class MatrixWhile {
	
	public static double [][] compute (double [][] a , double [][] b){
		
		double [][] erg = new double [a.length][a.length];
		
		int i=0;
		int j=0;
		int k=0;
		
		while (i<a.length){
			
			while (j<a.length){
				
				while (k<a.length){
					
					erg [i][j] += a[i][k] * b[k][j];
		
				}
				System.out.print(erg[i][j] + " ");
				j++;
				
			}
			System.out.println(" ");
			i++;
		}
		
		return erg;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		double [][] a = {{1,2}, {2,1}};
		double [][] b = {{2,1}, {3,4}};
		
		MatrixWhile.compute(a, b);
		
	}

}
 
Studieren geht über Probieren :joke:

Notfalls Debug-Ausgaben reinmachen
Java:
public class MatrixWhile {

    public static double [][] compute (double [][] a , double [][] b){

        double [][] erg = new double [a.length][a.length];

        int i=0;
        int j=0;
        int k=0;

        while (i<a.length){

            j = 0;
            while (j<a.length){

                k = 0;
                while (k<a.length){

                    System.out.println("Multipliziere a["+i+"]["+k+"]="+a[i][k]+" mit b["+k+"]["+j+"]="+b[k][j]+" und addiere es zu erg["+i+"]["+j+"]="+erg[i][j]);
                    erg [i][j] += a[i][k] * b[k][j];
                    System.out.println("Zetzt ist erg["+i+"]["+j+"]="+erg[i][j]);
                    k++;

                }
                System.out.print(erg[i][j] + " ");
                j++;

            }
            System.out.println(" ");
            i++;
        }

        return erg;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        double [][] a = {{1,2}, {2,1}};
        double [][] b = {{2,1}, {3,4}};

        MatrixWhile.compute(a, b);

    }

}
 
Das Blöde an deinen while-Schleifen ist, dass, nachdem die innere mal durchgelaufen ist, das k nirgends wieder auf 0 gesetzt wird (für j im Übrigen äquivalent). Also entweder du setzt es explizit auf 0, oder du verwendest eine for-Schleife anstelle der komischen whiles... dafür wurde die erfunden :rtfm:

Schau mal ganz genau in die Zeilen 13, 16 und 22 von Marco, dann siehst du, was ich meine.
 
Das Problem ist, dass bei einer NxN Matrix für die Multiplikation nicht 3 Schleifen benötigt werden.
 
meinst du dort
Java:
private double zeileMalSpalte (int zi, double [] [] b, int spi)
{ double summe = 0.0d;
      double [] zeile = mat[zi];
     for (int k=0; k < b.length; k++)
           summe += zeile[k] * b[k][spi];
     return (summe);
}

public Matrix matMult(Matrix b)
      { if ( spalten != b.zeilen ) return null; // inkompatible Dimensionen
           Matrix p = new Matrix (zeilen, b.spalten);
           for (int i = 0; i < zeilen; i++)
                      for (int j = 0; j < b.spalten; j++)
                                 p.belegeMatrixelement(i, j, zeileMalSpalte(i, b.mat, j));
           return(p);
     }

}
?

ist das nicht eine Doppelschleife in matMult,
worin dann zeileMalSpalte aufgerufen wird, in der noch eine dritte Schleife steht? 😉

mit Verteilen auf Methoden braucht man ja nichtmal eine Doppelschleife, drei einzelne gingen auch,

die drei Schleifen im Anfangspost sind gewiss strukturell falsch, das wurde durchaus richtig angemerkt
 
Es ging durchaus um die 3 Schleifen. Ich dachte, dass er vor hätte, die Schleifen z.B. durch Rekursion wie beim Strassen-Winograd zu verstecken, aber... (*nochmal schaut*) ... ja, das ist das Anfängerforum 😉

War vielleicht doch bissel früh heute morgen ;D

Ja, man braucht 3 schleifen ;D

Gruß,

Martin
 

Zurück
Oben