我编写了一个程序,用于对String中的int值求和。我虽然得到了错误的输出。我无法弄清楚这个问题。预期的输出应该是23和29,但我得到263和269.任何建议都会有所帮助;由于某种原因,它似乎在我的输出之间加了6。
public class ParseString
{
String str;
public ParseString(String x)
{
this.str = x;
}
public int sumOfAllDigits()
{
int total = 0;
char[] arr = new char[this.str.length()];
for(int i = 0; i < this.str.length(); i++)
{
arr[i] = this.str.charAt(i);
}
for(int i = 0; i < arr.length; i++)
{
if(arr[i] >= '0' && arr[i] <= '9')
{
total = total + arr[i];
}
}
return total;
}
public class TestParseString
{
public static void main(String[] args)
{
String s1 = "AB458JK2L#4";
ParseString ps1 = new ParseString(s1);
System.out.println("Sum of all digits in \"" + s1 + "\" is: ");
System.out.println(ps1.sumOfAllDigits());
System.out.println();
String s2 = "8927KL3PY";
ParseString ps2 = new ParseString(s2);
System.out.println("Sum of all digits in \"" + s2 + "\" is: ");
System.out.println(ps2.sumOfAllDigits());
}
}
答案 0 :(得分:2)
并不是6
插入你的总和;这是你的总和240
太高了。每个测试字符串中有5位数字。这里缺少的是char
和int
之间转换的内容。 '0'
不是0
;当char
加宽到int
进行求和时,它采用ASCII值,对于数字,这是代表的数字加上48。 '0'
- &gt; 48
,'1'
- &gt; 49
等等。
额外48
次增加5次会产生额外的240
。
由于数字是按'0'
48
开头的顺序编码的,因此您可以减去'0'
以取走不需要的数字。
total = total + arr[i] - '0';
顺便说一句,正如在问题评论中已经提到的那样,toCharArray()
比手动复制每个字符更容易让char[]
String
。
答案 1 :(得分:0)
问题在于:
total = total + arr[i];
arr[i]
是char
。当你对它使用+
运算符时,如果另一个操作数是int,你实际上是在添加字符的ASCII值,对于0到9,它是48到57。
你认为你这样做:
4 + 5 + 8 + 2 + 4
但实际上程序正在做:
52 + 53 + 56 + 50 + 52
这就是为什么你得到如此大的数字。
您需要解析字符以获得正确的输出。一种方法是减去48!
total = total + (arr[i] - 48);
或者您可以先将其转换为字符串,然后将其解析为int
:
total = total + Integer.parseInt(Character.toString(arr[i]));