2016-11-07 2 views
-1

Ich versuche, ein Programm zu schreiben, um die Summe der Ziffern in einer Zeichenfolge mit Rekursion zu bestimmen, dachte ich, dass der folgende Code "Die Summe ist 6" an die Konsole drucken würde, stattdessen gibt es "Der Code ist 150" aus.Was ist mein Fehler mit diesem Code?

Könnte mir bitte jemand sagen, was mein Fehler ist?

public class SumOfString { 
public static String Test = new String(); 
public static Integer count = new Integer(0); 
public static Integer sum = new Integer(0); 
public static long sumThis(String s){ 
    if (count< s.length()){ 
     if (Character.isDigit(s.charAt(count))){ 
      int digit = s.charAt(count); 
      count++; 
      sum += digit; 
      return sumThis(s);} 
     else{ 
      count++; 
      return sumThis(s);}} 
    else{ 
     return sum;}} 
public static void main(String[] args) { 
    Test= "1a2b3c"; 
    System.out.println("The sum is " + sumThis(Test)); 
} 
+0

was 'tstInt' – Mritunjay

+0

Ein Fehler, der zählen sollte – Wrolly13

Antwort

1

Ohne das Problem für Sie zu lösen:

Einen Fehler im Code ist:

int digit = s.charAt(count); 

Test Dieses Code-Snippet auf dem String "1" mit einer Zählung von 0. nicht die ganze Zahl 1 zurückkehrt, dass zu erhalten, müssen Sie diesen Anruf wickeln:

Character.getNumericValue(s.charAt(count)); 

Sie wirklich in der Gewohnheit o bekommen sollten f Ausführen des Codes im Debugger.

+0

Danke, ich dachte nicht, dass dies ein Problem verursachen würde. – Wrolly13

1

Die Ursache hierfür ist die Linie bei

int digit = s.charAt(count);,

charAt primitiven ein Zeichen zurückkehren wird deshalb wird es der Dezimalwert des Zeichens sein.

Character = Decimal Value 
`1` = 49 
`2` = 50 
`3` = 51 
------- 
150 

Sie müssen den Charakter umwandeln int: Java: parse int value from a char

+0

Danke, ich werde versuchen, das in Zukunft zu erinnern. – Wrolly13

1

Werfen Sie einen Blick auf eine ASCII-Tabelle, wie Sie sehen, dass der Wert von "1" 49 ist, "2" 50 ist und "3" 51 Summieren zu 150

versuchen

int digit = s.charAt(count) - 48;