使用charAt对字符串的数字求和

时间:2016-11-15 13:24:05

标签: java

这是我的函数,它应该添加并返回字符串中数字的总和。

public static int Sum(int a) {

    String row = String.valueOf(a);
    int counter = 0;
    int sum = 0;

    while (counter<row.length()){
        int b = row.charAt(counter);
        sum = sum + b;
        counter++;      
    }

    return sum; 
}

我不确定为什么这不会添加整数的所有数字。输出给了我完全不错的答案。欢迎帮助,欢呼。

输入:8576 输出:218 预期产出:8 + 5 + 7 + 6 = 26

修正:

public static int Sum(int a) {

    String row = String.valueOf(a);
    int counter = 0;
    int sum = 0;

    while (counter<row.length()){
        String b = String.valueOf(row.charAt(counter));
        int c = Integer.parseInt(b);
        sum = sum + c;
        counter++;

        }
    return sum;
}

4 个答案:

答案 0 :(得分:3)

问题是b是数字的Unicode值,¹不是数字值。例如,数字1的Unicode值为49。

要总结数字值,您需要处理它。您可以使用method Tariq mentions in his answer,将字符转换为字符串并将其解析为int,或者使用基于我上面提到的Unicode值的数学来实现。

¹更迂腐地说,如果字符可以用UTF-16中的单个代码单元(数字可以)表示,则数字的UTF-16序列化值。对于数字(以及所有127个ASCII值),这与数字的Unicode代码点相同。

答案 1 :(得分:2)

如上所述int b获得字符的ascii值,

更改

int b = Row.charAt(i);

char c = Row.charAt(i);
int b= Character.getNumericValue(c);

答案 2 :(得分:1)

int b = Row.charAt(i);是问题所在。整数获取字符的ascii值。 工作代码是:

public static int Sum(int a) {
        int sum = 0;
        int rest = 1;
        while(rest!=0){
            rest = a % 10;
            a = a / 10;
            sum = sum + rest;           
        }

        return sum;
    }

休息始终是最后一位数,因为int总是非十进制数,并且自动舍入,您可以使用a = a / 10;来“删除”最后一位数

答案 3 :(得分:0)

您实际上是在添加char的Unicode值而不是数值。为此,请查看此方法Character#getNumericValue  来自JDK Character class。您可以将代码更改为以下::

public static int sum(int a) {
    String Row = String.valueOf(a);
    int counter = 0;
    int sum = 0;

    while (counter < Row.length()) {
        int b = Character.getNumericValue(Row.charAt(counter));
        sum = sum + b;
        counter++;
    }
    return sum;
}

您也可以手动执行此操作。您可以int b = Character.getNumericValue(Row.charAt(counter));代替此int b = Row.charAt(counter) - '0';行,就好像您有char 1并且此值的Unicode为49且0的Unicode值为48。您使用1减去0字符值,然后您将获得字符1的实际数值。