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:
Java:
publicclass poiu {publicstaticvoid main (String[] args){byte[]GrosseZahl={4,2,6,7};byte[] andereZahl ={1,4,4,6};addiere(GrosseZahl, andereZahl);}publicstaticintaddiere(byte[]GrosseZahl,byte[] andereZahl){int[] c=newint[GrosseZahl.length+1];//Feld für Ergebnisint i;//Schleifenzählerint s;//Summe der aktuell berechneten Stelleint uebertrag =0;//Übertrag für die nächste Stellefor(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];}}
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?
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
Java:
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
Hmm okay aber es funktioniert einfach nicht...
oder ich bin zu doof dafür :bloed:
Java:
publicclass poiu {publicstaticvoid main (String[] args){byte[]GrosseZahl={4,2};byte[] andereZahl ={1,9};addiere(GrosseZahl, andereZahl);}publicstaticintaddiere(byte[]GrosseZahl,byte[] andereZahl){int[] c =newint[GrosseZahl.length+1];//Feld für Ergebnisint i;//Schleifenzählerint s;//Summe der aktuell berechneten Stelleint uebertrag =0;//Übertrag für die nächste Stellefor(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
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.
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:
publicclassPoiu{publicstaticvoid 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));}publicstaticintaddiere(byte[] grosseZahl,byte[] andereZahl){int[] c =newint[grosseZahl.length+1];//Feld für Ergebnisint s;//Summe der aktuell berechneten Stelleint uebertrag =0;//Übertrag für die nächste Stellefor(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 schleifeint 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 *1return ergebnis;}}
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
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.
Java:
publicclassPoiu{publicstaticvoid 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.}publicstaticbyte[]addiere(byte[] grosseZahl,byte[] andereZahl){int[] c =newint[grosseZahl.length+1];//Feld für Ergebnisint s;//Summe der aktuell berechneten Stelleint uebertrag =0;//Übertrag für die nächste Stellefor(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 =newbyte[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;}}