这是我的函数,它应该添加并返回字符串中数字的总和。
public static int Sum(int a) {
String row = String.valueOf(a);
int counter = 0;
int sum = 0;
while (counter<row.length()){
int b = row.charAt(counter);
sum = sum + b;
counter++;
}
return sum;
}
我不确定为什么这不会添加整数的所有数字。输出给了我完全不错的答案。欢迎帮助,欢呼。
输入:8576 输出:218 预期产出:8 + 5 + 7 + 6 = 26
修正:
public static int Sum(int a) {
String row = String.valueOf(a);
int counter = 0;
int sum = 0;
while (counter<row.length()){
String b = String.valueOf(row.charAt(counter));
int c = Integer.parseInt(b);
sum = sum + c;
counter++;
}
return sum;
}
答案 0 :(得分:3)
问题是b
是数字的Unicode值,¹不是数字值。例如,数字1的Unicode值为49。
要总结数字值,您需要处理它。您可以使用method Tariq mentions in his answer,将字符转换为字符串并将其解析为int
,或者使用基于我上面提到的Unicode值的数学来实现。
¹更迂腐地说,如果字符可以用UTF-16中的单个代码单元(数字可以)表示,则数字的UTF-16序列化值。对于数字(以及所有127个ASCII值),这与数字的Unicode代码点相同。
答案 1 :(得分:2)
如上所述int b
获得字符的ascii值,
更改
int b = Row.charAt(i);
要
char c = Row.charAt(i);
int b= Character.getNumericValue(c);
答案 2 :(得分:1)
int b = Row.charAt(i);
是问题所在。整数获取字符的ascii值。
工作代码是:
public static int Sum(int a) {
int sum = 0;
int rest = 1;
while(rest!=0){
rest = a % 10;
a = a / 10;
sum = sum + rest;
}
return sum;
}
休息始终是最后一位数,因为int总是非十进制数,并且自动舍入,您可以使用a = a / 10;
来“删除”最后一位数
答案 3 :(得分:0)
您实际上是在添加char的Unicode值而不是数值。为此,请查看此方法Character#getNumericValue 来自JDK Character class。您可以将代码更改为以下::
public static int sum(int a) {
String Row = String.valueOf(a);
int counter = 0;
int sum = 0;
while (counter < Row.length()) {
int b = Character.getNumericValue(Row.charAt(counter));
sum = sum + b;
counter++;
}
return sum;
}
您也可以手动执行此操作。您可以int b = Character.getNumericValue(Row.charAt(counter));
代替此int b = Row.charAt(counter) - '0';
行,就好像您有char 1
并且此值的Unicode为49且0
的Unicode值为48。您使用1
减去0
字符值,然后您将获得字符1
的实际数值。