Addieren zweier Arrays

Status
Nicht offen für weitere Antworten.

Stadtwerk

Mitglied
Hallo,
vielleicht könnt ihr uns helfen.
Wir möchten gerne zwei Arrays addieren und als ein drittes Array ausgeben, leider kommen nur Fehler raus. Kann sich vielleicht jemand mal denn Quelltext anschauen und uns viell. unseren Fehler sagen? Danke schon einmal im Vorraus.


class aufgabe4 {
public static void main (String [] args){


int [][] array1 = new int [][] {{1,3},{1,4},{9,5}};
int [][] array2 = new int [][] {{2,0},{8,8},{4,7}};

int a = array1.length;
int b = array2.length;

int c = array1[0].length;
int d = array2[0].length;

boolean e = (a==b);
boolean f = (c==d);

System.out.println ("Zeilenanzahl Array1: "+a +" Spaltenanzahl Array1: "+c);
System.out.println ("Zeilenanzahl Array2: "+b +" Spaltenanzahl Array2: "+d);
System.out.println ("Zeilenanzahl Array 1 ist gleich Zeilenanzahl Array 2: "+e);
System.out.println ("Spaltenanzahl Array 2 ist gleich Spaltenanzahl Array 1: "+f);




System.out.println ("Neues Array: "+addition(array1, array2));


}

public static int [][] addition (int [][]array1, int [][]array2){

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


int arrayneu [j]=array1[j]+array2[j];
return arrayneu [j];
}
}
}
}
 
> int arrayneu [j]=array1[j]+array2[j];
ist Quatsch,
das Array muss vor der Schleife einmal definiert werden:
int arrayneu [j]= new int[richtige länge][richtige länge];

und dann muss in der Schleife etwas in das Array geschrieben werden:
arrayneu [j]=array1[j]+array2[j];

> return arrayneu [j];

returnoffensichtlich erst NACH der Schleife, wieso schon nach der allerersten Teiladdition?

-----

Tipp: ruhig atmen und erstmal mit einem eindimensionalen Array anfangen
 
funktioniert leider troztdem nicht. die neue methode heißt jetzt bei uns:

public static int [][] addition (int [][]array1, int [][]array2){

int arrayneu [j]=new int [3][2];

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


arrayneu [j]=array1[j]+array2[j];

}

}
return arrayneu [j];
}


und bringt nen fehler "cannont find symbol variable i" und "cannont find symbol variable j" sowie "incompatible types" alles in der return zeile.

mmh. komisch.
ruhig bleiben ist schwer ;-)
 
Code:
public static int [][] addition (int [][]array1, int [][]array2){

int arrayneu [][] =new int [3][2];

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


arrayneu [i][j]=array1[i][j]+array2[i][j];

}


return arrayneu;}
 
SlaterB hat gesagt.:
das Array muss vor der Schleife einmal definiert werden:
int arrayneu [j]= new int[richtige länge][richtige länge];


Wenn dann ohne i und j...:
Code:
int arrayneu[][] = new int[array1.length][array1[0].length]


Was noch schief gehen wird, ist definitiv die Ausgabe:

Code:
System.out.println ("Neues Array: "+ addition(array1, array2));

Das bewirkt nur dass die Speicheradresse der Array-Variable ausgegeben wird; nicht aber die einzelnen Elemente.
Dafür solltest Du Dir noch eine extra Methode bauen, die 2-dimensionale Arrays elementweise ausgibt.

(Es gibt dafür zwar auch schon fertiges in der API aber das erzielt nicht den gleichen Lerneffekt bzgl. Feldern 😀 )
 
herzlichen dank für eure schnelle hilfe. haben*s geschafft. und stolz wie otto, hier unser schöner quelltext:

class aufgabe4 {
public static void main (String [] args){


int [][] array1 = new int [][] {{1,3},{1,4},{9,5}};
int [][] array2 = new int [][] {{2,0},{8,8},{4,7}};

int a = array1.length;
int b = array2.length;

int c = array1[0].length;
int d = array2[0].length;

boolean e = (a==b);
boolean f = (c==d);



System.out.println ("Zeilenanzahl Array1: "+a +" Spaltenanzahl Array1: "+c);
System.out.println ("Zeilenanzahl Array2: "+b +" Spaltenanzahl Array2: "+d);
System.out.println ("Zeilenanzahl Array 1 ist gleich Zeilenanzahl Array 2: "+e);
System.out.println ("Spaltenanzahl Array 2 ist gleich Spaltenanzahl Array 1: "+f);

int [][] arrayneu = addition(array1, array2);

for (int l=0;l<arrayneu.length;l++){
for (int k=0;k<arrayneu[0].length;k++){
System.out.println (arrayneu[l][k]);
}
}






}

public static int [][] addition (int [][]array1, int [][]array2){

int arrayneu [][]=new int [3][2];

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


arrayneu [j]=array1[j]+array2[j];

}

}


return arrayneu;
}
}
 
Stadtwerk hat gesagt.:
herzlichen dank für eure schnelle hilfe. haben*s geschafft. und stolz wie otto, hier unser schöner quelltext:

Code:
...
	public static int [][] addition (int [][]array1, int [][]array2){
		
		int arrayneu [][]=new int [3][2];
...

Jetzt mag es zwar funktionieren im Sinne von "ohne Fehlermeldungen", aber richtig ist es noch nicht ganz.
Wieso initialisierst du das Ergebnis-Array mit fester Größe und übernimmst nicht die Größe aus den Eingabe-Arrays?
 
moormaster hat gesagt.:
Jetzt mag es zwar funktionieren im Sinne von "ohne Fehlermeldungen", aber richtig ist es noch nicht ganz.
Wieso initialisierst du das Ergebnis-Array mit fester Größe und übernimmst nicht die Größe aus den Eingabe-Arrays?

mmh? wie meinen? wie sollte ich es machen? könntest du mir den text vielleicht kurz posten, so wie du es gemeint hast? wär lieb.
 
Stadtwerk hat gesagt.:
moormaster hat gesagt.:
Jetzt mag es zwar funktionieren im Sinne von "ohne Fehlermeldungen", aber richtig ist es noch nicht ganz.
Wieso initialisierst du das Ergebnis-Array mit fester Größe und übernimmst nicht die Größe aus den Eingabe-Arrays?

mmh? wie meinen? wie sollte ich es machen? könntest du mir den text vielleicht kurz posten, so wie du es gemeint hast? wär lieb.

So wie ich es oben schonmal vorgeschlagen habe:

Code:
// funktioniert nur richtig, wenn array1 min. ein Element enthält
int arrayneu[][] = new int[array1.length][array1[0].length]

oder wenn es noch allgemeiner sein soll (für 2-dimensionale Arrays, die unterschiedlich lange Teil-Arrays beinhalten; z.B. {{2,3}, {4,5,6}}):


Code:
int arrneu[][] = new int[array1.length][];

// für jedes Teilarray array1[i][] reserviere Speicher für ein neues ebenso langes Teilarray
for (int i=0;i<array1.length;i++)
    arrneu[i] = new int[array1[i].length];
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben