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
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.
packagede.fhalbsig.win.fields;importjava.util.Random;publicclassMatrix{publicint[][] matrix;publicMatrix(){
matrix =newint[10][5];}publicMatrix(int line,int column){
matrix =newint[line][column];}publicStringtoString(){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);//// }// }// }publicvoidinit(int min,int max){for(int i =0; i < matrix.length; i++){for(int j =0; j < matrix[i].length; j++){Random r =newRandom();int random = min +(int)(Math.random()* max);
matrix[i][j]= random;}}}publicintgetSumElementsColumn(int column){int result =0;for(int i =0; i < matrix[column].length; i++){
result += matrix[column][i];}return result;}publicintgetSumElementsLine(int line){int result =0;for(int i =0; i < matrix.length; i++){
result += matrix[i][line];}return result;}publicintgetLineDim(){return matrix.length;}publicintgetColumnDim(){int temp =0;for(int i =0; i < matrix.length; i++){
temp = matrix[i].length;}return temp;}publicvoidsetElementAt(int line,int column,int value){
matrix[line][column]= value;}publicintgetElementAt(int line,int column){return matrix[line][column];}publicvoidadd(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
Java:
packagede.fhalbsig.win.fields;publicclassMatrixApp{publicstaticvoidmain(String args[]){Matrix m =newMatrix(3,4);Matrix anotherMatrix =newMatrix(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ß
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
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
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
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.
Java:
publicclassMatrix{int[][] matrixA =newint[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 =newint[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 =newint[2][3];// Hier soll das Ergebnis gespeichert werden. publicvoidadd(int[][] matrixZwei){// Es wird KEIN Objekt übergeben sondern ein int[][] Arrayfor(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.}}}// AusgabepublicvoidausgabeMatrix(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:
Java:
publicclassEntry{publicstaticvoidmain(String[] args){Matrix test =newMatrix();
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"}}