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)