Fehler bei ASCII Char zu Int Umwandlung

Reach

Mitglied
Code:
import AlgoTools.IO;
public class CharSumme {
 
   public static void main(String[] args) {
     
       int ergebniss = 0;
       int ergebniss1 = 0;
     
       String zeichen = IO.readString("Geben Sie einen Text ein: ");
     
       for ( int pos = zeichen.length() - 1; pos >= 0 ; pos = pos-1 )
     
       { int zahl = (int) zeichen.charAt(pos);
       ergebniss = ergebniss + zahl;
       
           while ( ergebniss > 0) {
             
           if (zahl >= 48 && zahl <= 57) {
                   ergebniss1 = ergebniss1 + (zahl-48);
                   ergebniss = ergebniss1 / 10;
                 
                 
           } else {
               ergebniss1 = ergebniss1 + (ergebniss % 10);
               ergebniss = ergebniss / 10;
       }
}
}
       IO.print(ergebniss1);
}
}

Der Code soll Char einlesen , umwandeln in Integer & dann die Quersumme berechnen.
Mit Buchstaben funktioniert dieser Code 1A , jedoch bei Zahlen habe ich ein Problem, dort sollen nicht die ASCII sondern die wirklichen Zahlen benutzt werden, also bei 1 nicht 49 sondern 1.
48 - 57 sind die ASCII Dezimal Zahlen von 0 - 9. Die gehen in dem Code einzeln eingegeben auch .. es geht auch aa12 --> ergebniss ist 35 , also richtig..

Jedoch wenn ich z.B. 55 eingebe kommt -2147483646 als ergebniss raus, erkennt jemand einen Fehler, ich stehe stark auf dem Schlauch :-D
Ich vermute das der Fehler in dem oberen Teil der If Abfrage zwischen 48 & 57 oder irgendwo ein Fehler in den Schleifen? , das Else ist ja nur für buchstaben und funktioniert einwandfrei.

PS : IO sind Tools & dienen nur der vereinfachung für mich. Sind einfach z.B. zum enlesen und ausgeben da .
 
Hast du dir an den neuralgischen Stellen mal deine Variablen ergebniss und ergebniss1 und zahl ausgeben lassen ? Oder besser noch, geh einfach mal mit dem Debugger durch deinen Code
 
Fehler gefunden, war ne Dauerschleife .. In der If-Abfrage muss Ergebniss nur auf 0 gesetzt werden für die Zahlen..
Habe mir alle Variablen ausgeben lassen und somit den Fehler gefunden. Ich bedanke mich 🙂
 

Neue Themen


Zurück
Oben