# Brauche Hilfe! Matrizenmultiplikation in Java!



## sparklingwine (2. Januar 2005)

Hallo!

Kann mir vielleicht jemand weiterhelfen! Bin Programmier-Anfängerin und habe Probleme bei meinem ersten Programm!


*Eingabedaten:*
Lesen Sie zuerst die Dimension der Matrizen ein; diese muß > 0 und < 8 sein. 
Danach werden die Elemente der Matrizen eingelesen, und zwar in der Reihenfolge a11, a12, ... , a1n, a21, ... , a2n, ... , ann, b11, b12, ... , b1n, b21, ... , b2n, ... , bnn. 


Die einzelnen Elemente der Matrizen sind vom Typ INTEGER. 

*Ausgabedaten:*
Bei korrekten Eingabedaten geben Sie die Elemente der Ergebnismatrix zeilenweise aus, wobei Sie zwei Elemente jeweils durch ein Leerzeichen trennen. 
Geben Sie nach jeder Zeile der Matrix einen Zeilenvorschub aus. 

*Fehlerbehandlung:*
Sämtliche Eingabedatensätze sind immer vollständig einzulesen. Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt. 

Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden. Sind die Datentypen bei allen Eingaben richtig, die eingegebenen Daten aber inhaltlich nicht korrekt oder erfüllen nicht die Bedingungen (z.B. Dimension>7), so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.


Über Rückmeldung würde ich mich sehr freuen! Hoffe ihr habt ein paar gute Tipps für mich!

LG
Nicky


----------



## Christian Fein (2. Januar 2005)

Wie willst du den kompletten Code haben?

Im Forum gepostet? Als Zip File downloadbar? Mit Beschreibung oder ohne?


----------



## sparklingwine (2. Januar 2005)

Als zip-datei wäre super! Und wenn es möglich wäre mit Beschreibung, damit ich mich damit auseinandersetzen kann und es gut verstehe...

Vielen Dank!


----------



## Thomas Darimont (3. Januar 2005)

Hallo!

ich glaube 


> Wie willst du den kompletten Code haben?
> 
> Im Forum gepostet? Als Zip File downloadbar? Mit Beschreibung oder ohne?



war wohl eher ironisch gemeint...

aber schau mal hier:
(Bin davon ausgegangen, dass du deiner Aufgabenstellung nach mit quadratischen Matrizen arbeitest...

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MatrixMult {

	private int[][] mA, mB;
	private BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
	private String line;
	private int dim;

	public static void main(String[] args) {
		new MatrixMult().doIt();
	}

	private void doIt() {
		readMatrices();
		System.out.println("Matrix A:");
		printMatrice(mA);
		System.out.println("Matrix B:");
		printMatrice(mB);
		int[][] mC = multMatrices(mA, mB);
		System.out.println("Matrix C:");
		printMatrice(mC);

	}

	/**
	 * @param mA
	 */
	private void printMatrice(int[][] mA) {
		// TODO Auto-generated method stub
		for (int i = 0; i < mA.length; i++) {
			for (int j = 0; j < mA[i].length; j++) {
				System.out.print(mA[i][j]);
				System.out.print(" ");
			}
			System.out.println();
		}

	}

	/**
	 * @param mA
	 * @param mB
	 * @return
	 */
	private int[][] multMatrices(int[][] mA, int[][] mB) {
		// TODO Auto-generated method stub
		int[][] mC = new int[dim][dim];

		for (int i = 0; i < mC.length; i++) {
			for (int j = 0; j < mC[i].length; j++) {
				int v = 0;
				for (int n = 0; n < mA[i].length; n++) {
					v += mA[i][n] * mB[n][j];
				}
				mC[i][j] = v;
			}
		}

		return mC;
	}

	/**
	 * 
	 */
	private void readMatrices() {

		//Da wir die Dimension nur einmal einlesen haben die beiden (quadratischen) Matrizen
		//laut der Aufgabenstellung anscheindend die gleiche Dimension...
		//Deshalb fragen wir diese auch nur einmal ab.

		try {
			System.out.println(
				"Bitte geben Sie die Dimension der beiden quadratischen Matrizen ein:");
			line = br.readLine();
			dim = Integer.parseInt(line);

			if (dim < 1 || dim > 7) {
				System.out.println("Falsche Eingabe!");
				System.exit(-1);
			}

			mA = new int[dim][dim];
			mB = new int[dim][dim];

			System.out.println("Matrix A eingeben:");
			readMatrice(mA);
			System.out.println("Matrix B eingeben:");
			readMatrice(mB);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * @param mA
	 */
	private void readMatrice(int[][] mA) throws IOException {

		int i = 0;
		while ((line = br.readLine()) != null) {
			String[] items = line.split(" ");
			for (int j = 0; j < items.length; j++) {
				try {
					mA[i][j] = Integer.parseInt(items[j]);
				} catch (NumberFormatException e) {
					//e.printStackTrace();
					System.out.println('?');
					System.exit(-1);
				}
			}
			if (++i == dim)
				break;
		}
	}
}
```

Beispielsitzung:

```
Bitte geben Sie die Dimension der beiden quadratischen Matrizen ein:
3
Matrix A eingeben:
2 -3 -5
-1 4 5
1 -3 -4
Matrix B eingeben:
2 -2 -4
-1 3 4
1 -2 -3
Matrix A:
2 -3 -5 
-1 4 5 
1 -3 -4 
Matrix B:
2 -2 -4 
-1 3 4 
1 -2 -3 
Matrix C:
2 -3 -5 
-1 4 5 
1 -3 -4
```

HTH,
Gruß Tom


----------



## sparklingwine (3. Januar 2005)

VIELEN VIELEN DANK!

Das hat mir echt sehr weitergeholfen!

LG Nicky


----------

