我正在尝试使用递归来编写一个程序来确定字符串中数字的总和,我认为下面的代码会将“总和是6”打印到控制台,而是输出“代码是150” 。
有人可以告诉我我的错误是什么吗?
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 :(得分:1)
没有为您解决问题:
您的代码中的一个错误是:
int digit = s.charAt(count);
在String&#34; 1&#34;上测试这段代码。计数为0.它不返回整数1.为了得到它,你需要包装这个调用:
Character.getNumericValue(s.charAt(count));
你应该养成在调试器中运行代码的习惯。
答案 1 :(得分:1)
原因在于
int digit = s.charAt(count);
,
charAt
将返回一个字符原语,因此它将是该字符的十进制值。
Character = Decimal Value
`1` = 49
`2` = 50
`3` = 51
-------
150
您需要将字符转换为int: Java: parse int value from a char
答案 2 :(得分:1)
查看一个ascii表,因为您会看到"1"
的值为49,"2"
为50,"3"
为51,总计为150
试
int digit = s.charAt(count) - 48;