Java:添加字符串的数字

时间:2017-06-19 07:07:06

标签: java

我有正确的代码,很久以前我找到了答案,但是我仍然不明白为什么会有效。

class Main {
    public static void main(String[] args) {
        System.out.println(D5PSum(10));
    }

    private static int D5PSum(int number) {
        String n = Integer.toString(number);
        int sum = 0;
        for (int i = 0; i < n.length(); i++) {
            // (1) WHY DOES THIS NOT WORK
            //sum += Integer.parseInt(number.charAt(i));

            // (2) MORE IMPORTANTLY WHY DOES THIS WORK
            char c = n.charAt(i);
            sum += (c-'0');
            // (3) WHAT IN THE WORLD IS c-'0'
        }
        return sum;
    }
}

8 个答案:

答案 0 :(得分:1)

  

//(1)为什么这不起作用

因为Integer.parseInt(...);期望字符串作为参数而不是char

  

//(2)更重要的是,为什么这项工作

char c = n.charAt(i);

任何char都不是映射到符号表的整数...(例如ASCII表)所以这个(c - '0')只是另一个有效的数学运算

答案 1 :(得分:0)

  1. charAt 是基本类型int的有效方法。

  2. '0'是字符0,Java使用的字符编码集在连续块中具有0到9。因此c - '0'在该连续块中产生c的位置,因此是该数字的值。 (实际上这种事情是惯用的C - 可以追溯到20世纪60年代。)

答案 2 :(得分:0)

        // (1) WHY DOES THIS NOT WORK
        //sum += Integer.parseInt(number.charAt(i));

number是原始数据类型的变量&#34; int&#34;所以number.charAt(i)不会工作。

        // (2) MORE IMPORTANTLY WHY DOES THIS WORK
        char c = n.charAt(i);

n是String的一个实例,我们将字符放在n字符串中的第i个位置

        sum += (c-'0');
        // (3) WHAT IN THE WORLD IS c-'0'

每个字符都分配了一个ascii代码。 &#39; 0&#39; = 48,&#39; c&#39; = 99.这就是它在这里工作的原因。当&#39; c&#39; - &#39; 0&#39;被执行,它相当于99-48

答案 3 :(得分:0)

首先应将String转换为Int ..请检查以下代码:

 class MainClass {
        public static void main(String[] args) {
            System.out.println(D5PSum(11));
        }

        private static int D5PSum(int number) {
            String n = Integer.toString(number);
            System.out.println(n);
            int sum = 0;
            for (int i = 0; i < n.length(); i++) {
                // (1) WHY DOES THIS NOT WORK
                String str = String.valueOf(n.charAt(i));
                sum += Integer.parseInt(str);

                // (2) MORE IMPORTANTLY WHY DOES THIS WORK
    //            char c = n.charAt(i);
    //            sum += (c-'0');
                // (3) WHAT IN THE WORLD IS c-'0'
            }
            return sum;
        }
    }

答案 4 :(得分:0)

1 它不起作用,因为Integer.parseInt接受一个字符串,String.charAt返回一个字符(actar)。 Integer.parseInt (Character.toString(n.charAt(i)))可以使用。

2/3 char表示0到65535之间的数字。每个数字字符(0-9)在该范围内具有取决于字符集的数字。所有数字通常都在一行中,例如字符0的值为48,149和9 57.因此,您想要知道字符的数字值,只需从字符中减去字符值0即可。这就是行c-'0'

答案 5 :(得分:0)

如果你想要你的代码(无法工作的部分,那么就这样做)。

class Main {
    public static void main(String[] args) {
        System.out.println(D5PSum(10));
    }

    private static int D5PSum(int number) {
        String n = Integer.toString(number);
        int sum = 0;
        for (int i = 0; i < n.length(); i++) {

            sum += Integer.parseInt(n.charAt(i)+"");


        }
        return sum;
    }
}

答案 6 :(得分:0)

为什么首先要转换为字符串?解决这个问题的最简单,最快捷的方法是不偏离字符串:

private static int D5PSum(int number) {
    int v = number, sum = 0;
    while (v != 0) {
        sum += v % 10;
        v /= 10;
    }
    return sum;
}

答案 7 :(得分:0)

要获取字符串str的数字总和:

int sum = str.chars().map(Character::getNumericValue).sum();