Hi Leute hätte eine Kurze frage zu meinem Code bei dem ich aus einem String die einzelnen Zahlen entnehmen soll und daraus die Quersumme bilden soll
Java:
publicstaticintquersummeExtended(String zahlstring){int ergebnis =0;for(int i =0; i < zahlstring.length(); i++){
ergebnis +=(int) zahlstring.charAt(i);}return ergebnis;}[code]Angenommen der String lautet "999", dann bekomme ich als Ergebnis171.Ich weiß wenn ich bei meinen code hinter (int) zahlstring.charAt(i)+"0" hinzufüge kommt das Richtige raus.Aber ich verstehe nicht wieso.Was hat das +"0" für Auswirkungen.Und warum funktioniert mein Code nicht so wie er da steht?
Du bekommst hier den Ascii Wert und nicht die eigentliche Zahl.
9 ist in Ascii 57 ... 57 * 3 = 171.
Du musst das ein wenig anders machen, es gibt einen kleinen Trick aus einem char ein String zu machen.
Java:
String s ="999";int quersumme =0;for(char c : s.toCharArray()){
quersumme +=Integer.parseInt(c+"");}System.out.println(quersumme);
man kann auch statt des + ""
Java:
quersumme +=Integer.parseInt(String.valueOf(c));
schreiben.
Also zuerst dafür sorgen das der char zu einem String wird und den dann in ein Integer wandeln.
Falls die Schleife für dich komisch aussieht, das ist eine forEach Schleife die durch alle Elemente einer Liste, in diesem Fall durch jeden Char des Strings, geht. In der Variable "char c" wird dann das aktuelle Element gespeichert.
Ich wusste das ich den Ascii Wert heraus bekomme. Als ich mir die Lösung zu der Aufgabe angeschaut habe war der einzige Unterschied das nach dem zahlstring.charAt(i) noch ein +"0" hinzugefügt wurde. Nachdem ich es eingefügt habe kam die richtige Lösung. Aber ich verstehe nicht warum es dadurch richtig wird. Ergebnis ist ein int wert ich wandle zahlstringt in ein char um und durch die implizite Umwandlung wird aus dem string ein char. Aber was bringt mir der String "0"?
Hab mich verschrieben ich füge noch ein char hinten dran und zwar - '0'. Wenn der wert 57 ist und ich dann minus 48 rechne bekomme ich 9 heraus. Hab es verstanden .Trozdem danke
Ja, - '0' zieht das richtig ab. ABER! Du musst dann noch eine Prüfung einbauen, ob es wirklich eine Zahl war, also dass der Wert zwischen 0 und 9 liegt. Denn Dein Code kann dann alle verarbeiten also auch eine Quersumme von "abc" ausgeben, was natürlich Quatsch wäre!
Ahh bitte nicht selbst machen, es gibt in Character doch genügend Utilitymethoden für diese Aufgabe:
Java:
publicstaticintdigitSum(String val){int sum =0;for(int i =0; i < val.length(); i++){int c = val.charAt(i);if(Character.isDigit(c)){
sum +=Character.digit(c,10);}else{thrownewIllegalArgumentException();}}return sum;}