Java 整数的位数之和

Java 整数的位数之和,java,string,sum,Java,String,Sum,以下两种方法有效 public static int sumInt(int num) { int sum; for (sum = 0; num != 0; num = num/10) { sum += num % 10; } return sum; } 及 但我想知道如何做一些事情,程序将输入读取为字符串,然后使用charAt()检查字符串的每个索引,然后从每个索引中减去“0”,并将它们相加。这可能没有那么有效,但能做到吗?以下是我目前掌握的情况

以下两种方法有效

public static int sumInt(int num) {
    int sum;
    for (sum = 0; num != 0; num = num/10) {
        sum += 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;
    }
}

你能做的是:

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

对于(int i=0;i您可以按如下方式执行:

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'
中减去
'0'
48
。同样地,
'1'
的ASCII值是49,因此要获得
'1'
的数值,需要减去
'0'
48'0'
48

嗯,为什么不直接使用
nextInt()
呢?我认为依赖Java库(社区总是在尝试和测试)总是更好的而不是自己重写代码:-)

扫描仪输入=新扫描仪(System.in);
System.out.println(“输入一个整数:”);
int number=input.nextInt();
//调用旧的sumInt(int)方法
System.out.println(“\n“+number+”的数字之和为“+sumInt(number));
我认为您没有正确使用
charAt
。我认为
num.charAt()++
在系统上都不正确。您应该这样做:

publicstaticintsumint(stringnum){
整数和=0;
对于(int i=0;i
是的,这是可以做到的。你发布的代码有什么问题(所以我们不必猜测)?但我想做一些事情,程序将输入读取为字符串,然后使用charAt()要检查字符串的每个索引,请从每个索引中减去“0”,然后将所有索引相加。-是的,您可以这样做,但为什么?与数字算术相比,字符串操作的成本要高得多。
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)