整数的各位数字之和

问题描述 投票:0回答:4

以下两种方法有效。

public static int sumInt(int num) {
    int sum;
    for (sum = 0; num != 0; num = num/10) {
        sum += num % 10;
    }
    return sum;
}

public static int sumInt(int num) {
    int sum = 0;
    while (num != 0) {
        sum+= num%10;
        num = num/10;
    }
    return sum;
}

但是我想知道程序将输入作为字符串读取,然后使用 charAt() 检查字符串的每个索引,然后从每个索引中减去“0”并将它们加在一起。 它可能没有那么有效,但是可以做到吗? 这是我到目前为止所拥有的,但不太正确:

import java.util.Scanner;

public class SumDigitsString {
    public static void main (String[] args ) {
        Scanner input = new Scanner (System.in);
    
        System.out.print("Enter an integer:  ");
        String number = input.next();
        System.out.println("\nThe sum of the digits of " + number + " is " + sumInt(number));
    }   

    public static String sumInt(String num) {

        int sum = 0;

        while (num.length() - num.charAt() > 0)
        sum += (num.charAt(num.length())) + '0';
        num.charAt()++;
        return sum;
    }
}
java string sum
4个回答
1
投票

你能做的是:

public static int sumInt(String num) {
  int sum = 0;
  for (int i = 0; i<num.length(); i++)
    sum += num.charAt(i) - '0';
  return sum;
}

如果您取出索引 i 处的字符并减去“0”,您将根据 ASCII 表获得该字符的值,然后当您将其添加到 sum 时,它会隐式转换为整数。


0
投票

嗯,你为什么不直接使用

nextInt()
来代替呢?我认为依赖 Java 库(这些库总是由社区尝试和测试)总是比自己重写代码更好:-)

Scanner input = new Scanner(System.in);
System.out.println("Enter an integer: ");
int number = input.nextInt();
// Call your old sumInt(int) method 
System.out.println("\nThe sum of the digits of " + number + " is " + sumInt(number));

我认为你没有正确使用

charAt
。我认为
num.charAt()++
在语法上也不正确。你应该做这样的事情:

public static int sumInt(String num) {
    int sum = 0;
    for (int i = 0; i < num.length(); i++) {
        sum += (num.charAt(i) - '0');
    }
    return sum;
}

0
投票

您可以按照以下方式进行:

public static int sumInt(String num) {
      int sum = 0, i = 0;
      while (i < num.length()) {
            char ch = num.charAt(i);
            if (Character.isDigit(ch)) {
                  sum += ch - '0';
                  i++;
            } else {
                  throw new IllegalArgumentException(num + " is not a whole number.");
            }
      }
      return sum;
}

示例运行:

Enter an integer:  1234

The sum of the digits of 1234 is 10

另一个示例运行:

Enter an integer:  12a34
Exception in thread "main" java.lang.IllegalArgumentException: 12a34 is not a whole number.
    at Main.sumInt(Main.java:20)
    at Main.main(Main.java:9)

这个想法是将每个数字的数值添加到用

sum
初始化的变量(上面给出的代码中的
0
)。请注意,检查字符是否是数字也很重要,如果不是则抛出一些异常。

'0'
的ASCII值为48,因此要得到
'0'
的数值,需要从
'0'
减去
48
'0'
。同样,
'1'
的 ASCII 值为 49,因此要获得
'1'
的数值,您需要从
'0'
中减去
48
'1'
。综上所述,为了得到数字字符的数值,我们需要从中减去
'0'
48


0
投票

这也可以用递归来解决。此任务有两种递归方法:

方法#1:保留标志

    public static int digitsSum(int n) {
        if (Math.abs(n) > 9) {
            return n % 10 + digitsSum(n / 10);
        }
        return n;
    }

方法#2:使用绝对值(无符号)

    public static int absDigitsSum(int n) {
        if (Math.abs(n) > 9) {
            return Math.abs(n % 10) + absDigitsSum(Math.abs(n) / 10);
        }
        return n;
    }

测试两种方式:

    public static void main(String[] args) {
        int sum1 = digitsSum(-125);
        System.out.println(sum1);
        int sum2 = digitsSum(125);
        System.out.println(sum2);

        System.out.println(" ");

        int sum3 = absDigitsSum(-125);
        System.out.println(sum3);
        int sum4 = absDigitsSum(125);
        System.out.println(sum4);
    }

终端上的结果

-8
8
 
8
8
© www.soinside.com 2019 - 2024. All rights reserved.