Funktion Matrizenmultiplikation

wheinz2409

Mitglied
Hallo,

habe hier ein kleines prob. In der main Methode sollen zwei Matrizen angelegt werden und diese dann an eine weitere Methode übergeben werden, die dann diese multipliziert. Irgendwie kriege ich bei der Ausgabe nur komische Zeichen und Zahlen. Hoffe es kann jemand einem Java Anfänger helfen.

mfg
Java:
public class matrizenMultipli {

	/**
	 * Zwei Matrizen multiplizieren
	 */
	
	public static int[][] maMulti (int matrix_a[][], int matrix_b[][]) {
		int matrix_c[][] = new int[10][10];
		for (int i=0; i<10; i++) {
			for (int j=0; j<10; j++) {
				for (int k=0; k<10; k++) {
					matrix_c[i][j] =+ matrix_a[i][k]*matrix_b[k][j];
				}
			}
		}
		return matrix_c;
	}

	public static void main(String[] args) {
		int wert=1;
		System.out.println("Zwei Matrizen Multiplizieren");
		int matrix_a[][] = new int[10][10];
		int matrix_b[][] = new int[10][10];
		
		for (int i=0; i<matrix_a.length; i++) {
			for (int j=0; j<matrix_a.length; j++) {
				matrix_a[j][i] = wert;
				matrix_b[j][i] = wert;
				wert++;
				System.out.print(matrizenMultipli.maMulti(matrix_a, matrix_b));
			}
		System.out.println();
		
		}
	}
}
 
[c]System.out.println(java.util.Arrays.toString(meinArray));[/c]

Nebenbei sollte man Code möglichst allgemein schreiben. Statt z.B. fest von der Größe 10 auszugehen, sollte man diese lieber von den übergebenen Arrays auslesen (die man sowieso noch auf die richtigen Dimensionen prüfen sollte). Sonst hast du ein Problem, wenn du in einem halben Jahr deinen Code wieder herauskramst und die Funktion für 11x11-Matrizen verwendest.
 
bedenke auch
Java:
public class Test {
    public static void main(String[] args)  {
       int x = 4;
       int y = 4;
       x =+ 5;
       y += 5;
       System.out.println(x);
       System.out.println(y);
    }
}
 
Das mit dem hash code verstehe ich nicht ganz? Wenn ich die beiden erstellten Matrizen ausgebe, stehen alle Werte richtig im Array. Nur nach der Multiplikation bekomme ich so komische Werte.
mfg
 
> Wenn ich die beiden erstellten Matrizen ausgebe,
wo machst du das denn? im Code nicht zu sehen

> Nur nach der Multiplikation bekomme ich so komische Werte.
was für eine Ausgabe denn genau?
siehe auch mein Post zwischendurch, 14:22
 
@SlaterB, deinen Beitrag habe ich gesehen und verstanden was da passiert. Habe meinen Code auch schon geändert. Es sollen zwei Matrizen (matrix_a & matrix_b) miteinander multipliziert werden. Nach der Berechnung bekomme ich folgendes als Ausgabe:

[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
[[I@19821f, [I@addbf1, [I@42e816, [I@9304b1, [I@190d11, [I@a90653, [I@de6ced, [I@c17164, [I@1fb8ee3, [I@61de33]
 
tja, bei zwei Dimensionen versagt auch Arrays.toString(meinArray), nutze altbekannte Schleifen,
schreibe dir am besten eine Untermethode ausgabe(int[][] array), die System.out.println verwendet oder einen String zusammenbaut und zurückgibt,
übe zunächst mit eindimensionalen Arrays, falls es Probleme gibt

du hast noch nicht verraten, was "Wenn ich die beiden erstellten Matrizen ausgebe, stehen alle Werte richtig im Array." bedeutet
 
Ich meinte wenn die beiden Matrizen (matrix_a & matrix_b) erstellt und mit Werten gefüllt wurden. Wenn ich diese vor der Multiplikation ausgebe, steht in jedem Feld eine Zahl. Nur wenn ich die Methode maMulti aufrufe und matrix_c mit den multiplizierten Werten fülle, bekomme ich oben gezeigte Ausgabe.
 
> Wenn ich diese vor der Multiplikation ausgebe,

du weigerst dich weiter, den Code dazu zu nennen, wahrscheinlich nutzt du Schleifen, z.B. jeden Wert einzeln bei der Befüllung,
fürs Ergebnis verwendest du stattdessen eine andere Art der Ausgabe, anderen Code

du siehst nicht ein, dass es also am Code liegt, nicht an der Wahl der Arrays, ob nun A, B oder Ergebnis?

> Kann es vielleicht daran liegen dass ich bei der Ausgabe keinen Index angebe, auf welches Feld ich bei der berechneten Matrize zugreifen möchte?

genau, das kann sehr gut sein
 
Hier der Code der die Berechnung durchführt und die matrix_c füllt:

Java:
for (int i=0; i<10; i++) {
			for (int j=0; j<10; j++) {
				for (int k=0; k<10; k++) {
					matrix_c[i][j] += matrix_a[i][k]*matrix_b[k][j];
				}
			}
		}
		return matrix_c;

Mittlerweile habe ich einen Index bei der Ausgabe hinzugefügt und bekomme jetzt für jedes Feld eine 0 ausgegeben.
 
ich würde dir jetzt nebenbei vorschlagen für Tests auf eine kleinere Maxtrix von 1x1 oder 2x2 umzustellen,
aber wie Landei schon gesagt hat geht das bei deinem Code nicht so leicht,
überlege dennoch in der Richtung

außerdem viele System.out.println() einbauen, schaue doch genau nach was für jeden Index an Zahlen multipliziert werden,

bestimmt ist dein Problem aber, dass du während der Befüllung der Arrays schon rechnest, da sind doch die meisten Stellen im Array noch leer, 0,
folgender Test
Java:
public class Test
{
    public static void main(String[] args)
    {
        matrizenMultipli.main(null);
    }
}


class matrizenMultipli
{
    public static int[][] maMulti(int matrix_a[][], int matrix_b[][])
    {
        int matrix_c[][] = new int[10][10];
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                for (int k = 0; k < 10; k++)
                {
                    matrix_c[i][j] += matrix_a[i][k] * matrix_b[k][j];
                }
            }
        }
        return matrix_c;
    }

    public static void main(String[] args)
    {
        int wert = 1;
        System.out.println("Zwei Matrizen Multiplizieren");
        int matrix_a[][] = new int[10][10];
        int matrix_b[][] = new int[10][10];

        for (int i = 0; i < matrix_a.length; i++)
        {
            for (int j = 0; j < matrix_a.length; j++)
            {
                matrix_a[j][i] = wert;
                matrix_b[j][i] = wert;
                wert++;
            }
        }
        System.out.print(matrizenMultipli.maMulti(matrix_a, matrix_b)[0][0]);
    }
}
liefert als Ausgabe (nur eine Stelle des Ergebnisarrays, siehe Code)
Code:
Zwei Matrizen Multiplizieren
3355
 

Zurück
Oben