将String(包含字符和整数)转换为整数并在JAVA中计算总和

时间:2015-07-16 13:04:42

标签: java algorithm char int charat

  • 此方法计算长度为10的字符串中所有数字的总和。字符串的格式必须为" 12345?789x"或" 12?4567890",其中'?'可以躺在任何地方,其值为0,' x' (如果存在)位于String的末尾,等于10.
  • 总和应按如下方式计算: 对于" 11432?789x",sum =(10 * 1)+(9 * 1)+(8 * 4)+(7 * 3)+(6 * 2)+(5 * 0)+ (4 * 7)+(3 * 8)+(2 * 9)+(1 * 10)= 164。
  • 此代码适用于以' x'结尾的数字,但对于那些没有,它会将sum的值返回为0.例如,对于" 111?111111& #34;而不是返回48,它返回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;
    }
    

3 个答案:

答案 0 :(得分:2)

你的例子:

111?111111

预期结果:48

如果我打电话:

String input = "111?111111";
int result = sum(input,input.length());

结果是48

也许你这样称呼方法:

String input = "111?111111";
int result = sum(input,0);

结果是0

或者和的第二个参数已损坏。

答案 1 :(得分:2)

我写了这个测试并且它是绿色的:

@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()。

答案 2 :(得分:2)

更简单的方法:

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;
}