# Matrix Matrix Multiplikation



## maximator (1. Dez 2011)

Hallo,

habe versucht ein  Matrix Matrix Multiplikatinsprogramm zu schreiben. Es sieht meiner Meinung nach auch in Ordnung aus.
Es ist aber bei zwei Methodenaufrufen der Fehler missing return statement zu sehen. Mein Problem ist es das Ergebniss der Rechnung zurückzugeben, in die neue Methode einzulesen und auszugeben.
Das ist mein Code bis jetzt. Wäre sehr dankbar für Hilfe.


```
import java.util.*;


public class NewClass {
	static double[][] matrix;
	static double[][] matrix2, matrixmatrix2Produkt;
	static int zeilen,spalten;
        static int zeilen2,spalten2;
        static int neueMatrix;
	static Scanner sc = new Scanner(System.in);
	
	
	public static void main(String[] args) {
		Locale.setDefault(Locale.US);
		
		getDimensions();
                
                getDimensions2();
                
		matrix = matrixEinlesen(zeilen, spalten);
		
		matrix2 = matrix2Einlesen(zeilen2, spalten2);
		
		berechnematrixmatrix2Produkt(matrix,matrix2);
                
		matrixAusgeben();
	}
	
	
	public static void getDimensions() {
		System.out.println("Geben Sie die Dimensionen fuer die Matrix ein");
		System.out.println("Anzahl der Zeilen:");
		zeilen = sc.nextInt();
		System.out.println("Anzahl der Spalten:");
		spalten = sc.nextInt();
	}
	
        public static void getDimensions2() {
		System.out.println("Geben Sie die Dimensionen fuer die Matrix2 ein");
		System.out.println("Anzahl der Zeilen:");
		zeilen2 = sc.nextInt();
		System.out.println("Anzahl der Spalten:");
		spalten2 = sc.nextInt();
	}
	
	
	
	public static double[][] matrixEinlesen(int m, int n) {
		double[][] matrix;
		
		System.out.println("Geben Sie nun die Werte fuer die Matrix ein");
		matrix = new double[m][n];
		for(int i=0;i<m;i++) {
			for (int y=0;y<n;y++) {
				System.out.println("Geben Sie den Wert der Spalte "+(y+1)+" in Zeile "+(i+1)+" ein");
				matrix[i][y] = sc.nextDouble();
			}
		}
		System.out.println("Matrix wurde erfolgreich eingegeben");
		
		return matrix;
	}
        
        public static double[][] matrix2Einlesen(int m, int n) {
		double[][] matrix2;
		
		System.out.println("Geben Sie nun die Werte fuer die Matrix2 ein");
		matrix2 = new double[m][n];
		for(int i=0;i<m;i++) {
			for (int y=0;y<n;y++) {
				System.out.println("Bitte geben Sie den Wert der Spalte "+(y+1)+" in Zeile "+(i+1)+" ein");
				matrix2[i][y] = sc.nextDouble();
			}
		}
		System.out.println("Matrix wurde erfolgreich eingegeben");
		
		return matrix2;
	
}
	

	
	
	public static double[][] berechnematrixmatrix2Produkt(double[][] matrix, double[][] matrix2) {
		double[][] neuematrix;
		double Summe; //zwischenwert, der fuer das Berechnen der Summe benoetigt wird
		
		neuematrix = new double[zeilen][spalten];
		for(int i=0;i<matrix.length;i++) {
			Summe=0;
			for (int j=0;j<matrix2[0].length;j++) {
                            for (int k= 0; k< matrix[0].length;k++){
				Summe += matrix[i][k]*matrix2[k][j];
			}
			neuematrix[i][j] = Summe;
		
                        }
		return neuematrix;
                        }
     public static double[][] matrixAusgeben(double berechnematrixmatrix2Produkt[][]){
  
          int[][] neuematrix = {{1,2,3},{4,5,6},{7,8,9}};
          for (int i = 0;i < matrix.length;i++) {
            for (int j = 0;j < matrix[i].length;j++) {
          System.out.print(matrix[i][j] + " ");
}
System.out.println(neueMatrix);
         
                 
                   
                 }}}
```


----------



## njans (1. Dez 2011)

*matrixAusgeben()* hat schon mal kein return


----------



## Final_Striker (1. Dez 2011)

deine Methode 
	
	
	
	





```
matrixAusgeben
```
 gibt nichts zurück.


----------



## maximator (1. Dez 2011)

Hab jetzt die letzte Methode rausgenommen, weil die mir jetzt sinnlos erschien.
Mein return statement ist eingefügt. Das Programm scheint aber gar nicht in meine Multiplikationsmethode reinzugehen. Es lässt mich beide Matrizen eingeben und dann kommt als Ergebniss Null. Und nicht wie ich mir das vorgestellt habe meine neueMatrix die ich zurückgebe und dann versuche über System.out.println auszugeben.
Ich checks nicht


```
import java.util.*;


public class NewClass {
        static double[][] Summe;
        static double[][] neueMatrix;
	static double[][] matrix;
	static double[][] matrix2, matrixmatrix2Produkt;
	static int zeilen,spalten;
        static int zeilen2,spalten2;
       
	static Scanner sc = new Scanner(System.in);
	
	
	public static void main(String[] args) {
		Locale.setDefault(Locale.US);
		
		getDimensions();
                
                getDimensions2();
                
		matrix = matrixEinlesen(zeilen, spalten);
		
		matrix2 = matrix2Einlesen(zeilen2, spalten2);
		
		neueMatrix = berechnematrixmatrix2Produkt(matrix,matrix2);
                
                System.out.println(neueMatrix);
                		
	}
	
	
	public static void getDimensions() {
		System.out.println("Geben Sie die Dimensionen fuer die Matrix ein");
		System.out.println("Anzahl der Zeilen:");
		zeilen = sc.nextInt();
		System.out.println("Anzahl der Spalten:");
		spalten = sc.nextInt();
	}
	
        public static void getDimensions2() {
		System.out.println("Geben Sie die Dimensionen fuer die Matrix2 ein");
		System.out.println("Anzahl der Zeilen:");
		zeilen2 = sc.nextInt();
		System.out.println("Anzahl der Spalten:");
		spalten2 = sc.nextInt();
	}
	
	
	
	public static double[][] matrixEinlesen(int m, int n) {
		double[][] matrix;
		
		System.out.println("Geben Sie nun die Werte fuer die Matrix ein");
		matrix = new double[m][n];
		for(int i=0;i<m;i++) {
			for (int y=0;y<n;y++) {
				System.out.println("Geben Sie den Wert der Spalte "+(y+1)+" in Zeile "+(i+1)+" ein");
				matrix[i][y] = sc.nextDouble();
			}
		}
		System.out.println("Matrix wurde erfolgreich eingegeben");
		
		return matrix;
	}
        
        public static double[][] matrix2Einlesen(int m, int n) {
		double[][] matrix2;
		
		System.out.println("Geben Sie nun die Werte fuer die Matrix2 ein");
		matrix2 = new double[m][n];
		for(int i=0;i<m;i++) {
			for (int y=0;y<n;y++) {
				System.out.println("Bitte geben Sie den Wert der Spalte "+(y+1)+" in Zeile "+(i+1)+" ein");
				matrix2[i][y] = sc.nextDouble();
			}
		}
		System.out.println("Matrix wurde erfolgreich eingegeben");
		
		return matrix2;
	
}
	

	
	
	public static double[][] berechnematrixmatrix2Produkt(double[][] matrix, double[][] matrix2) {
		double[][] neuematrix;
		double Summe; //zwischenwert, der fuer das Berechnen der Summe benoetigt wird
		
		neuematrix = new double[zeilen][spalten];
		for(int i=0;i<matrix.length;i++) {
			Summe=0;
			for (int j=0;j<matrix2[0].length;j++) {
                            for (int k= 0; k< matrix[0].length;k++){
				Summe += matrix[i][k]*matrix2[k][j];
			}
			neuematrix[i][j] = Summe;
		
                        }
		return neueMatrix;
                        }
                return neueMatrix;
        }}
```


----------



## maximator (4. Dez 2011)

Jetzt scheint es durzurechnen, bleibt aber an der letzten Methode hängen, da ich anscheinend eine leere Variable übergebe, was ich aber nicht verstehe, da ich ja neueMatrix berechnet habe. Wäre sehr dankbar für Hilfe.


```
import java.util.*;


public class NewClass {
        static double[][] Summe;
        static double[][] neueMatrix;
	static double[][] matrix;
	static double[][] matrix2, matrixmatrix2Produkt;
	static int zeilen,spalten;
        static int zeilen2,spalten2;
       
	static Scanner sc = new Scanner(System.in);
	
	
	public static void main(String[] args) {
		Locale.setDefault(Locale.US);
		
		getDimensions();
                
                getDimensions2();
                
		matrix = matrixEinlesen(zeilen, spalten);
		
		matrix2 = matrix2Einlesen(zeilen2, spalten2);
		
		neueMatrix = berechnematrixmatrix2Produkt(matrix,matrix2);
                
                MatrixAusgeben(neueMatrix);
                
        }
	public static void MatrixAusgeben(double[][] neueMatrix) {
            for (int i = 0;i < neueMatrix.length;i++) {
              for (int j = 0;j < neueMatrix[i].length;j++) {
                 System.out.print(neueMatrix[i][j] + " ");
}
                           System.out.println();
                            }}
        
	
	public static void getDimensions() {
		System.out.println("Geben Sie die Dimensionen fuer die Matrix ein");
		System.out.println("Anzahl der Zeilen:");
		zeilen = sc.nextInt();
		System.out.println("Anzahl der Spalten:");
		spalten = sc.nextInt();
	}
	
        public static void getDimensions2() {
		System.out.println("Geben Sie die Dimensionen fuer die Matrix2 ein");
		System.out.println("Anzahl der Zeilen:");
		zeilen2 = sc.nextInt();
		System.out.println("Anzahl der Spalten:");
		spalten2 = sc.nextInt();
	}
	
	
	
	public static double[][] matrixEinlesen(int m, int n) {
		double[][] matrix;
		
		System.out.println("Geben Sie nun die Werte fuer die Matrix ein");
		matrix = new double[m][n];
		for(int i=0;i<m;i++) {
			for (int y=0;y<n;y++) {
				System.out.println("Geben Sie den Wert der Spalte "+(y+1)+" in Zeile "+(i+1)+" ein");
				matrix[i][y] = sc.nextDouble();
			}
		}
		System.out.println("Matrix wurde erfolgreich eingegeben");
		
		return matrix;
	}
        
        public static double[][] matrix2Einlesen(int m, int n) {
		double[][] matrix2;
		
		System.out.println("Geben Sie nun die Werte fuer die Matrix2 ein");
		matrix2 = new double[m][n];
		for(int i=0;i<m;i++) {
			for (int y=0;y<n;y++) {
				System.out.println("Bitte geben Sie den Wert der Spalte "+(y+1)+" in Zeile "+(i+1)+" ein");
				matrix2[i][y] = sc.nextDouble();
			}
		}
		System.out.println("Matrix wurde erfolgreich eingegeben");
		
		return matrix2;
	
}
	

	
	
	public static double[][] berechnematrixmatrix2Produkt(double[][] matrix, double[][] matrix2) {
		double[][] neuematrix;
		double Summe; //zwischenwert, der fuer das Berechnen der Summe benoetigt wird
		
		neuematrix = new double[zeilen][spalten];
		for(int i=0;i<matrix.length;i++) {
			Summe=0;
			for (int j=0;j<matrix2[0].length;j++) {
                            for (int k= 0; k< matrix[0].length;k++){
				Summe += matrix[i][k]*matrix2[k][j];
			}
			neuematrix[i][j] = Summe;
		
                        }
		
                        }
                return neueMatrix;
                

        }}
```


----------



## Kiri (4. Dez 2011)

Zeile 110 enthält einen Schreibfehler, deshalb gibt er eine leere Matrix zurück. Müsste heißen


```
return neuematrix;
```

alles kleingeschrieben


----------



## gl-trakt (5. Dez 2011)

Hallo, ich bin neu da und versuche auch Java zu erlernen. Zu Deinem Programm, "maximator": ganz im gegenteil zum letzten Beitrag soll in Zeilen 85, 88 usw. "neueMatrix" stehen. Das wäre aber nicht das einzigste Problem, deswegen habe ich Dein Code kopiert und bearbeitet ohne eigentlich zu hoffen das zu schaffen. Habe zwar für Matrix statt "double" Typ "int" und noch Ausdruckpunkte zur Kontrolle eingesetzt, kriegst Du leicht wieder zurück. Viel Spaß damit, bei Fragen stehe gerne zur Verfügung. 



```
import java.util.*;
 
 
public class NewClass
{
        static int Summe;
        static int[][] matrix, matrix2, neueMatrix;
        static int zeilen,spalten;
        static int zeilen2,spalten2;
        static Scanner sc = new Scanner(System.in);
        static String s = "";
    
    public static void main(String[] args)
    {
        Locale.setDefault(Locale.US);
        
        getDimensions();
        getDimensions2();
                
        matrix = matrixEinlesen(zeilen, spalten);
// Ausgabe - Kontrollpunkt               
        for(int i=0; i<matrix.length; i++)
        {
            for (int j=0; j<matrix[i].length; j++)
            {
               System.out.print (" i=" + i + " j=" + j + " Wert= " + matrix[i][j]);
                 System.out.println ();
            }
        }
        
        matrix2 = matrix2Einlesen(zeilen2, spalten2);
// Ausgabe2 - Kontrollpunkt               
        for(int i=0; i<matrix2.length; i++)
        {
            for (int j=0; j<matrix2[i].length; j++)
            {
               System.out.print (" i=" + i + " j=" + j + " Wert= " + matrix2[i][j]);
                 System.out.println ();
            }
        }
        
        neueMatrix = berechnematrixmatrix2Produkt(matrix, matrix2);
// AusgabeNeuMatrix - Kontrollpunkt               
        for(int i=0; i<neueMatrix.length; i++)
        {
            for (int j=0; j<neueMatrix[i].length; j++)
            {
               System.out.print(" i=" + i + " j=" + j + " Wert= " + neueMatrix[i][j]);
                 System.out.println();
            }
        }
// oder Ausgabestring: Zeilen durch Newline getrennt, Werte durch Sternchen
        for(int i=0; i<neueMatrix.length; i++)
        {
        String s = " ";
          for (int j = 0; j < neueMatrix[i].length; j++)
          {
            s += neueMatrix[i][j] + " * ";
          }
          s += "\n";
          System.out.println(s);
        }        
    }

    public static void getDimensions()
    {
        System.out.println("Geben Sie die Dimensionen fuer die Matrix ein");
        System.out.println("Anzahl der Zeilen:");
        zeilen = sc.nextInt();
        System.out.println("Anzahl der Spalten:");
        spalten = sc.nextInt();
    }
    
    public static void getDimensions2()
    {
        System.out.println("Geben Sie die Dimensionen fuer die 2.Matrix ein");
        System.out.println("Anzahl der Zeilen:");
        zeilen2 = sc.nextInt();
        System.out.println("Anzahl der Spalten:");
        spalten2 = sc.nextInt();
    }
    
    
    public static int[][] matrixEinlesen(int m, int n)
    {

        System.out.println("Geben Sie nun die Werte fuer die Matrix ein");
        matrix = new int[m][n];
              for(int i=0;i<m;i++)
              {
                for (int j=0;j<n;j++)
                {
                System.out.println("Geben Sie den Wert der Spalte "+(j+1)+" in Zeile "+(i+1)+" ein");
                matrix[i][j] = sc.nextInt();
                }
              }
        System.out.println("Matrix wurde erfolgreich eingegeben");

        return matrix;
    }
        
    public static int[][] matrix2Einlesen(int m, int n)
    {

        System.out.println("Geben Sie nun die Werte fuer die Matrix2 ein");
        matrix2 = new int[m][n];
              for(int i=0;i<m;i++)
              {
                for (int j=0;j<n;j++)
                {
                System.out.println("Bitte geben Sie den Wert der Spalte "+(j+1)+" in Zeile "+(i+1)+" ein");
                matrix2[i][j] = sc.nextInt();
                }
              }
        System.out.println("2.Matrix wurde erfolgreich eingegeben");

        return matrix2;
    }
    
    public static int[][] berechnematrixmatrix2Produkt(int[][] mx, int[][] mx2)
    {
        int[][] neueMatrix;
        int Summe; //zwischenwert, wird fuer das Berechnen der Summe benoetigt wird
        
        neueMatrix = new int[zeilen][spalten2];

        for(int i=0;i<zeilen;i++)
        {
            for (int j=0;j<spalten2;j++)
            {
                 Summe=0;
                 for (int k=0; k<spalten;k++)
                   {
                   Summe += mx[i][k] * mx2[k][j];
                   }
                 neueMatrix[i][j] = Summe;
            }
        }

        return neueMatrix;
    }
}
```


----------

