我有正确的代码,很久以前我找到了答案,但是我仍然不明白为什么会有效。
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;
}
}
答案 0 :(得分:1)
//(1)为什么这不起作用
因为Integer.parseInt(...);
期望字符串作为参数而不是char
//(2)更重要的是,为什么这项工作
char c = n.charAt(i);
任何char都不是映射到符号表的整数...(例如ASCII表)所以这个(c - '0')
只是另一个有效的数学运算
答案 1 :(得分:0)
charAt
不是基本类型int
的有效方法。
'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();