将字符串(包含字符和整数)转换为整数并计算 JAVA 中的总和
Converting String (containing characters and integers) to integers and calculating the sum in JAVA
- 此方法计算长度为 10 的字符串中所有数字的总和。字符串的格式必须为“12345?789x”或“12?4567890”,其中“?”可以位于任何位置并且值为 0,'x'(如果存在)位于字符串的末尾并且等于 10。
- 总和应计算如下:
对于“11432?789x”,总和 = (10*1)+(9*1)+(8*4)+(7*3)+(6*2)+(5*0)+(4*7) +(3*8)+(2*9)+(1*10) = 164.
- 此代码非常适用于以 'x' 结尾的数字,但对于不以 'x' 结尾的数字,它 returns 总和的值为 0。例如,对于“111?111111”返回 48,它 returns 0.
我找不到错误。请帮忙
public static int sum(String input,int l){
int sum=0;
int temp=0;
char a;
for(int i=0;i<l;i++){
a=input.charAt(i);
if(a=='x'){
temp=10;
}
else if(a=='?'){
temp=0;
}
else{
temp = Character.getNumericValue(input.charAt(i));
}
sum = temp*(10-i)+sum;
}
return sum;
}
你的例子:
111?111111
预期结果:48
如果我打电话:
String input = "111?111111";
int result = sum(input,input.length());
结果是 48
也许你这样调用方法:
String input = "111?111111";
int result = sum(input,0);
结果是0
或者 sum 的第二个参数已损坏。
我写了这个测试,它是绿色的:
@Test
public void removeme() {
String input = "111?111111";
int sum = 0;
int temp = 0;
for(int i = 0; i < input.length(); i++){
char a = input.charAt(i);
if(a == 'x'){
temp = 10;
} else if(a == '?'){
temp = 0;
} else {
temp = Character.getNumericValue(input.charAt(i));
}
sum = temp * (10 - i) + sum;
}
assertThat(sum , is(48));
}
我建议你删除参数 l
并像我一样使用 input.length()。
有趣的是,我使用的是您发布的相同代码,而且我得到了正确的答案。顺便说一句,你引用的例子
(10*1)+(9*1)+(8*4)+(7*3)+(6*2)+(5*0)+(4*7)+(3*8)+(2 *9)+(1*10) = 133. 正确答案是164.
更简单的方法:
public static int sum(String input) {
int sum = 0, temp = 0, i = 0;
for (char a : input.toCharArray()) {
temp = a == 'x' ? 10 : a == '?' ? 0 : Character.getNumericValue(a);
sum += temp * (10 - i++);
}
return sum;
}
- 此方法计算长度为 10 的字符串中所有数字的总和。字符串的格式必须为“12345?789x”或“12?4567890”,其中“?”可以位于任何位置并且值为 0,'x'(如果存在)位于字符串的末尾并且等于 10。
- 总和应计算如下: 对于“11432?789x”,总和 = (10*1)+(9*1)+(8*4)+(7*3)+(6*2)+(5*0)+(4*7) +(3*8)+(2*9)+(1*10) = 164.
- 此代码非常适用于以 'x' 结尾的数字,但对于不以 'x' 结尾的数字,它 returns 总和的值为 0。例如,对于“111?111111”返回 48,它 returns 0.
我找不到错误。请帮忙
public static int sum(String input,int l){ int sum=0; int temp=0; char a; for(int i=0;i<l;i++){ a=input.charAt(i); if(a=='x'){ temp=10; } else if(a=='?'){ temp=0; } else{ temp = Character.getNumericValue(input.charAt(i)); } sum = temp*(10-i)+sum; } return sum; }
你的例子:
111?111111
预期结果:48
如果我打电话:
String input = "111?111111";
int result = sum(input,input.length());
结果是 48
也许你这样调用方法:
String input = "111?111111";
int result = sum(input,0);
结果是0
或者 sum 的第二个参数已损坏。
我写了这个测试,它是绿色的:
@Test
public void removeme() {
String input = "111?111111";
int sum = 0;
int temp = 0;
for(int i = 0; i < input.length(); i++){
char a = input.charAt(i);
if(a == 'x'){
temp = 10;
} else if(a == '?'){
temp = 0;
} else {
temp = Character.getNumericValue(input.charAt(i));
}
sum = temp * (10 - i) + sum;
}
assertThat(sum , is(48));
}
我建议你删除参数 l
并像我一样使用 input.length()。
有趣的是,我使用的是您发布的相同代码,而且我得到了正确的答案。顺便说一句,你引用的例子 (10*1)+(9*1)+(8*4)+(7*3)+(6*2)+(5*0)+(4*7)+(3*8)+(2 *9)+(1*10) = 133. 正确答案是164.
更简单的方法:
public static int sum(String input) {
int sum = 0, temp = 0, i = 0;
for (char a : input.toCharArray()) {
temp = a == 'x' ? 10 : a == '?' ? 0 : Character.getNumericValue(a);
sum += temp * (10 - i++);
}
return sum;
}