# arrays miteinander addieren



## java_anfänger(= (9. Jan 2014)

Hallo,
ich bin ein totaler Java Anfänger und bruche lede Hilfe die ich  kriegen kann...
Ich muss zwei Arrays mteinander addieren und ergebnis zurückgeben, leider stimmt etwas mit meinem Übertrag nicht, der wird auf die Zahl links daneben addiert und wie es eigentlich richtig ist rechts: Also zum Beispiel ist 4267 + 1446 = 5604 (der eine Übertrag wurde falsch gesetzt)
Ach ja und diese REchnung geht nur wenn beide array die gleiche länge besitzen, hat jemad eine idee wie man es auch unabhängig von deren länge machen kann???

Vielen Dank im Voraus
hier ist mein code:


```
public class poiu {    
	public static void main (String[] args){
		
		byte[] GrosseZahl = {4, 2, 6, 7};
		byte[] andereZahl = {1, 4, 4, 6};
		
		addiere(GrosseZahl, andereZahl);
	}
	
	public static int addiere(byte[] GrosseZahl, byte[] andereZahl){				
	
		
	int [] c=new int [GrosseZahl.length+1]; 				//Feld für Ergebnis
	    int i;  							//Schleifenzähler
	    int s;  						//Summe der aktuell berechneten Stelle
	    int uebertrag = 0;							 //Übertrag für die nächste Stelle
	   
	    for (i=0; i<c.length-1; i=i+1){
	        s=GrosseZahl[i]+andereZahl[i];
	        c[i]= (s+uebertrag) % 10;
	        uebertrag = s/10;
	        System.out.print(c[i]);
	        
	    }
	    c[c.length-1]=uebertrag;
	    
	    return c[i];
	}}
```


----------



## Gucky (9. Jan 2014)

Du führst deine Logik nur bis zur Länge des kürzeren Arrays durch und machst dann das mit deinem Übertrag, so lange, bis der Übertrag+aktueller Eintrag<10.
Dann müsstest du aber die vorletzte geschriebene Codezeile ändern.

BTW gibst du nur den letzten Eintrag des Arrays zurück. Ist das gewollt?


----------



## java_anfänger(= (10. Jan 2014)

Vielen Dank für deine Hilfe erst mal,
mein Problem ist nur das meine logik nicht auf geht, zum Beispiel 42+19 ist wenn ich die Zeile 

```
c[c.length-1]=uebertrag;
```
weg lasse = 51

Also müsste ich ja eigentlich noch das ergebnis der oben genaten Zeile noch zum array ergebnis[0] addieren damit 61 herauskommt oder?
Sorry ich bin wirklich total ein Anfänger...
Hoffe du kannst mir helfen


----------



## Gucky (10. Jan 2014)

Im letzten Feld könnte auch etwas stehen. Du müsstest das = in ein += umändern oder du tust es mit in die Schleife.


----------



## java_anfänger(= (10. Jan 2014)

Hmm okay aber es funktioniert einfach nicht...
oder ich bin zu doof dafür :bloed:


```
public class poiu {    
        public static void main (String[] args){
           
            byte[] GrosseZahl = {4, 2};
            byte[] andereZahl = {1, 9};
           
            
            addiere(GrosseZahl, andereZahl);
        }
       
        public static int addiere(byte[] GrosseZahl, byte[] andereZahl){               
       
           
        int [] c = new int [GrosseZahl.length+1];                 //Feld für Ergebnis
            int i; 					                             //Schleifenzähler
            int s;                  					        //Summe der aktuell berechneten Stelle
            int uebertrag = 0;                          		 //Übertrag für die nächste Stelle
           
            for (i=0; i<c.length-1; i++){
            	
                s=GrosseZahl[i]+andereZahl[i];
                c[i]= (s+uebertrag) % 10;
                uebertrag = s/10;
                c[c.length-1] += uebertrag; 
                
                System.out.print(c[i]);
                
            }
            
           
            return c[i];
        }}
```
Hier kommt 511 herraus statt 61, ich muss es irgendwie noch hinkriegen den übertrag mit dem vorgerigen array feld zu addieren und nicht in ein neues array feld zu schreiben.

Hat jmd eine Idee???
Danke im Voraus für eure Hilfe


----------



## TheSorm (10. Jan 2014)

Was genau wilst du den machen ? wilst eine zahl oder ein array rausbekommen ? weil bei dem array wäre es ja einfach nur c_=a+b in der for schleife und das wars._


----------



## pcProfie (10. Jan 2014)

das c_ das du returnst die letzte stelle von dem ergebnis! ist der erste fehler, den zweiten fehler also die 5 anstatt der 6 finde ich noch 

was soll den das programm machen? soll c das endergebnis liefern?_


----------



## pcProfie (10. Jan 2014)

der fehler ist: du hast in den summanden 2 felder und im ergebnis 3 felder

|_| |_| + |_| |_| = |_| |_| |_|
 .0....1......0....1......0....1....2

wenn du die zahlen aus den behältern 0 im ergebnis bei 0 speicherst haste ja aus z.b. 10 + 10 = 200. du musst deshalb das ergebnis aus den feldern in 0 im ergebnis bei 1 speichern. code kommt gleich

oder anders erklärt:
das ergebnis von behälter0 + behälter0 soll doch in behälter1 vom ergebnis.
behälter0 vom ergebnis wird nur gebraucht wenn das ergebnis >= 100 ist.
behälter2 vom ergebnis ist b1 + b1 der summanden

du hast:
behälter0 + behälter0 = behälter0 vom ergebnis. also hast du das ergebnis eine stelle zu weit links geschrieben also *100. deshalb diese 500er zahl. :idea:


----------



## pcProfie (10. Jan 2014)

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

        byte[] grosseZahl = {4, 2}; //tipp fuer die schule oder auch so: methoden und variabeln
                      //schreibt man klein. klassen schreibt man groß
        byte[] andereZahl = {1, 9};

        System.out.println("\nreturnt: " + addiere(grosseZahl, andereZahl));
    }

    public static int addiere(byte[] grosseZahl, byte[] andereZahl){              

        int [] c = new int [grosseZahl.length+1];                 //Feld für Ergebnis
        int s;                                              //Summe der aktuell berechneten Stelle
        int uebertrag = 0;                                   //Übertrag für die nächste Stelle

        for (int i=0; i<c.length-1; i++){

            s=grosseZahl[i]+andereZahl[i];
            uebertrag = (s/10)*10;
            c[i+1]= s - uebertrag;
            uebertrag /= 10;
            System.out.println("ubertrag "+ uebertrag+ " an stelle " + i);
            c[i] += uebertrag;

            //System.out.print(c[i]);

        }

        System.out.print("\nErgebnis: ");
        for(int o = 0; o < c.length; o++) {
            System.out.print(c[o]);
        }

        // bei diesem return wuerde 1 rauskommen, also die letzte stelle von deinem ergebnis, 
        //da i ja ein zahler ist und hier ans ende zeigt
        //return c[i];
        //deshalb kann i auch in der schleife definiert werden

        //also: komplettes c[] zu einer zahl zusammenfassen
        //entweder return (c[0]*100)+(c[1]*10)+c[2]; oder in einer seperaten schleife
        int ergebnis = 0;
        for(int i = 0; i < c.length; i++) {
            ergebnis += c[i] * Math.pow(10, (c.length-1 - i));
        }
        // der teil Math.pow(10, (c.length-1 - i)) bedeutet im prinzip nur *100, *10 und *1
        return ergebnis;
    }
}
```


----------



## java_anfänger(= (11. Jan 2014)

Ahhhhh :idea:
Vielen vielen Dank für die Hilfe!!

Eine letzte Frage habe ich aber noch wie kann ich das eregbnis in "grosseZahl" speichern, sodass ich nur grosseZahl ausgeben muss für das ergebnis???
Also wie man ein array umwandelt in einen String dass habe ich schon, muss halt nur noch das Ergebnis in grosseZahl speichern...
Hoffe ein letztes mal, dass ihr mir helfen könnt


----------



## pcProfie (11. Jan 2014)

ich weiß zwar nicht wieso du das machen willst aber. dann musste aus public int ... ein public byte[].. machen weil du ein byte[] und nicht einen int returnen willst. 
dann musste großezahl neu implementieren, weil du ja jetzt ein array mit 3 stellen hast also großezahl = new int[3]. danach kannst du System.out.print("\nErgebnis: "); und den rest der methode danach löschen. und zuletzt eine for schleife anfügen, die die werte aus dem c[] gecastet in das großezahl[] überträgt
naja und return großezahl;

und c kann man nicht weglassen da man ja großezahl auf 3 stellen bringen muss und es dafür gelöscht wird.


```
public class Poiu {    
        public static void main (String[] args){
     
            byte[] grosseZahl = {4, 2}; //tipp fuer die schule oder auch so: methoden und variabeln
                          //schreibt man klein. klassen schreibt man groß
            byte[] andereZahl = {1, 9};
     
            System.out.println("\nreturnt: " + addiere(grosseZahl, andereZahl)); // wenn du das ausgeben willst musste wieder eine schleife machen und jede zahl einzeln ausgeben s.u.
        }
     
        public static byte[] addiere(byte[] grosseZahl, byte[] andereZahl){              
     
            int [] c = new int [grosseZahl.length+1];                 //Feld für Ergebnis
            int s;                                              //Summe der aktuell berechneten Stelle
            int uebertrag = 0;                                   //Übertrag für die nächste Stelle
     
            for (int i=0; i<c.length-1; i++){
     
                s=grosseZahl[i]+andereZahl[i];
                uebertrag = (s/10)*10;
                c[i+1]= s - uebertrag;
                uebertrag /= 10;
                System.out.println("ubertrag "+ uebertrag+ " an stelle " + i);
                c[i] += uebertrag;
            }
     
            grosseZahl = new byte[3];
            System.out.println("\nErgebnis: ");
            for(int i = 0; i < grosseZahl.length; i++) {
                grosseZahl[i] = (byte)c[i];
                System.out.print(grosseZahl[i]);
            }
            
            return grosseZahl;
        }
    }
```


----------



## java_anfänger(= (11. Jan 2014)

vielen dank für die Hilfe


----------

