# Mehrdimensionale Array addieren



## putinator (16. Sep 2013)

Hi Leute ich versuche gerade eine Praktikumsaufgabe aus dem Studium zu machen. Nur leider komm ich auch nach intensivem googlen nicht darauf..
Wir sollen in der Aufgabe folgendes machen:
void add( Matrix anotherMatrix): Addition einer Matrix zur gegebenen Matrix.

public void addMatrix(Matrix anotherMatrix) {

		for (int i = 0; i < matrix.length; i++) {
			for (int j = 0; j < matrix[0].length -1; j++) {
				matrix_[j] = matrix[j] + anotherMatrix.matrix[j];
				System.out.println(matrix.length);
			}
		}
	}
so hab ich das versucht zu machen nur leider stimmt die ausgabe nicht.
matrix.length gibt doch die spaltendimension aus richtig? und das sollte dann sein [4][3] + [3][3] = länge 7

würde mich sehr über ein paar tipps freuen
gruß_


----------



## DrZoidberg (16. Sep 2013)

Das "- 1" stimmt nicht. Und wieso gibst du matrix.length mehrmals aus? Das ändert sich doch nicht.


----------



## Samuel72 (16. Sep 2013)

putinator hat gesagt.:


> Nur leider komm ich auch nach intensivem googlen nicht darauf..


Vielleicht musst du noch intensiver googlen; probier mal:

java 2 dimensional array

Und übrigens: 

Java™ Quelltext ist bitte in 
	
	
	
	





```
-Tags zu schreiben.

Das liest sich einfach besser: 
[code=Java]
public void addMatrix(Matrix anotherMatrix) {
		
		for (int i = 0; i < matrix.length; i++) {
			for (int j = 0; j < matrix[0].length -1; j++) {
				matrix[i][j] = matrix[i][j] + anotherMatrix.matrix[i][j];
				System.out.println(matrix.length);
			}
		}
	}
```


----------



## njans (21. Sep 2013)

> und das sollte dann sein [4][3] + [3][3] = länge 7



Nein. jeder index_[j] steht für einen Wert in der Matrix. Und du addiert die Werte. Die länge sagt nur, wie viele Einträge in der Zeile bzw. Spalte sind._


----------



## putinator (14. Okt 2013)

ohne java tag...


----------



## putinator (14. Okt 2013)

```
package de.fhalbsig.win.fields;

import java.util.Random;

public class Matrix {

	public int[][] matrix;

	public Matrix() {
		matrix = new int[10][5];
	}

	public Matrix(int line, int column) {
		matrix = new int[line][column];
	}

	public String toString() {
		String returnString = "Matrix \n";
		int i, j;
		for (i = 0; i < matrix.length; i++) {
			for (j = 0; j < matrix[i].length; j++)
				returnString += "[" + matrix[i][j] + "]";
			returnString += "\n";
		}
		return returnString;
	}

	// public void init(int min, int max) {
	//
	// for (int i = 0; i < matrix.length; i++) {
	// for (int j = 0; j < matrix[i].length; j++) {
	// Random r = new Random();
	// matrix[i][j] = (r.nextInt() * (max - min) + min);
	//
	// }
	// }
	// }

	public void init(int min, int max) {

		for (int i = 0; i < matrix.length; i++) {
			for (int j = 0; j < matrix[i].length; j++) {
				Random r = new Random();
				int random = min + (int) (Math.random() * max);
				matrix[i][j] = random;

			}
		}
	}

	public int getSumElementsColumn(int column) {

		int result = 0;
		for (int i = 0; i < matrix[column].length; i++) {
			result += matrix[column][i];
		}
		return result;

	}

	public int getSumElementsLine(int line) {

		int result = 0;
		for (int i = 0; i < matrix.length; i++) {
			result += matrix[i][line];
		}
		return result;
	}

	public int getLineDim() {

		return matrix.length;

	}

	public int getColumnDim() {
		int temp = 0;
		for (int i = 0; i < matrix.length; i++) {
			temp = matrix[i].length;

		}
		return temp;
	}

	public void setElementAt(int line, int column, int value) {
		matrix[line][column] = value;
	}

	public int getElementAt(int line, int column) {

		return matrix[line][column];
	}

	public void add(Matrix anotherMatrix) {
		for (int i = 0; i < matrix.length; i++) {
			for (int j = 0; j < matrix[i].length; j++) {

				matrix[i][j] = matrix[i][j] + anotherMatrix.matrix[i][j];

			}
		}

	}
}
```

das war die klasse selbst jetzt hier die testklasse


```
package de.fhalbsig.win.fields;

public class MatrixApp {
public static void main(String args[]){
	
	Matrix m = new Matrix(3,4);
	Matrix anotherMatrix = new Matrix(3,4);
	//int [][] matrix = erMnew int [3][3];
	
	anotherMatrix.init(2,4);
	System.out.println(anotherMatrix.toString());
	
	
	
	System.out.println("Leere Matrix");
	System.out.println(m.toString());
	
	System.out.println("-------------------------------------" + "\n" + "Füllen mit zufälligen Werten");
	m.init(0,5);
	System.out.println(m.toString());
	
	System.out.println("-------------------------------------" + "\n" + "Anzahl der Zeilen");
	System.out.println(m.getLineDim());
	System.out.println("-------------------------------------" + "\n" + "Summe aller Elemente pro Zeile");
	m.getSumElementsLine(0);
	m.add(anotherMatrix);
	
	System.out.println(m.toString());
	
	
	
}
}
```

also meine frage beläuft sich auf die letzte zeile der Klasse Matrix
 matrix_[j] = matrix[j] + anotherMatrix.matrix[j];
ich habe mir das genau so gedacht aber es hat nicht funktionier weil ich bei  anotherMatrix.matrix[j]; einfach anotherMatrix[j] gemacht habe und kein anotherMatrix.matrix[j];
Wieso ist das so ? Warum? Bin sehr dankbar für eine Antwort
gruß_


----------



## Starkstr0m (14. Okt 2013)

Meiner Meinung nach ist hier der Fehler:


```
...
for (int j = 0; j < matrix[i].length; j++) {
}
...
```


Du vergleichst mit 

```
j < matrix[i].length;
```
etwas für mich sinnloses. 

lass das _ mal weg. 

matrix gibt dir den WERT an der Stelle i wieder._


----------



## putinator (14. Okt 2013)

also die methode funktioniert einwandfrei sie addiert den wert von matrix zb an der der stelle [0][4] = 5 und anotherMatrix an der Stelle [0][4] = 3 und mit der toString wird dann in der testklasse mit objekt m.toString() die 9 ausgegeben 
die logik darauf bin ich schon selber gekommen aber versteh nicht warum

anotherMatrix.matrix_[j];

und nicht einfach nur anotherMatrix[j];_


----------



## putinator (14. Okt 2013)

putinator hat gesagt.:


> also die methode funktioniert einwandfrei sie addiert den wert von matrix zb an der der stelle [0][4] = 5 und anotherMatrix an der Stelle [0][4] = 3 und mit der toString wird dann in der testklasse mit objekt m.toString() die 9 ausgegeben
> die logik darauf bin ich schon selber gekommen aber versteh nicht warum
> 
> anotherMatrix.matrix_[j];
> ...


_



matrix zb an der der stelle [0][4] = 5 und anotherMatrix an der Stelle [0][4] = 3 und mit der toString wird dann in der testklasse mit objekt m.toString() die 9 ausgegeben  
sorry wird natürlich ne 8 ausgegeben 5+3 = 8_


----------



## Starkstr0m (15. Okt 2013)

Hey, 

musste das ganze mir gerade einmal nachstellen. Hab nun die einfache Antwort gefunden. 

du musst das so aufrufen, da 

anothermatrix ein Objekt der Klasse Matrix ist. Und diese Objekt hat das Attribut *matrix[][]*.

Die Namenswahl von dir war vllt etwas verwirrend. 
Man greift hier einfach mit dem Objektnamen auf ein Attribut zu. 

```
Objektname.Attribut
```

Ich hoffe das hilft dir weiter


----------



## Starkstr0m (15. Okt 2013)

Hier nochmal anders formuliert: 

Du übergibst der Methode ein Objekt der Klasse Matrix. Deshalb rufst du über den Objektnamen das Attribut auf. 

*Man könnte es auch anders machen: *
Man übergibt direkt ein zweidimensionales Array! Dann muss die Methode aber etwas anders aufgerufen werden. 


```
public class Matrix {

int[][] matrixA = new int[2][3];{
		matrixA[0][0] = 1;
		matrixA[0][1] = 1;
		matrixA[0][2] = 1;
		matrixA[1][0] = 1;
		matrixA[1][1] = 1;
		matrixA[1][2] = 1;


	}	
	
	int[][] matrixB = new int[2][3];
	{
		matrixB[0][0] = 3;
		matrixB[0][1] = 41;
		matrixB[0][2] = 6;
		matrixB[1][0] = 5;
		matrixB[1][1] = 2;
		matrixB[1][2] = 1;
	
	}

	int[][] matrixC = new int[2][3]; // Hier soll das Ergebnis gespeichert werden. 

public void add(int[][] matrixZwei){      // Es wird KEIN Objekt übergeben sondern ein int[][] Array
	for (int i = 0; i < matrixA.length; i++) {
		for (int j = 0; j < matrixA[i].length; j++) {
			matrixC[i][j] = matrixA[i][j] + matrixZwei[i][j]; // Das Array wird direkt angesprochen, da es so übergeben wurde.
		}
	}
}

// Ausgabe
public void ausgabeMatrix(int[][] matrix){ 
	for (int i = 0; i < matrixA.length; i++) {
		for (int j = 0; j < matrixA[i].length; j++) {
			System.out.println("Stelle: [" + i + "][" +j+ "] Wert: " + matrix[i][j]);
		}
	}
}
	
}
```

Main:

```
public class Entry {

	public static void main(String[] args) {

		Matrix test = new Matrix();
		test.add(test.matrixB); // Aufruf der Methode add() mit Übergabe eines Attributes des Objektes "test".
		test.ausgabeMatrix(test.matrixC); // Aufruf der Methode ausgabeMatrix() mit Übergabe eines Attributes des Objektes "test"
	}
}
```


----------

