【问题标题】:Converting String (containing characters and integers) to integers and calculating the sum in JAVA将字符串(包含字符和整数)转换为整数并在 JAVA 中计算总和
【发布时间】:2015-10-05 22:43:04
【问题描述】:
  • 此方法计算长度为 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”结尾的数字,它会将 sum 的值返回为 0。例如,对于“111?111111”而不是返回 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;
    }
    

【问题讨论】:

  • “12345?789x”或“12?4567890”,在哪里?可以位于任何位置并且值为 0,'x'(如果存在)位于字符串的末尾并且等于 10。”您的示例甚至不是这种形式
  • "111?111111" 从你的代码是结果 48
  • @Fabinout 确实如此,数字可以是 1 到 9 之间的任何数字,而不是 0 和 10(因为它们是 ? 和 x)
  • 不,您的代码结果为 48 @ryan321,请确保 l(长度)在作为参数传递时不是 0
  • "111?111111" 返回 48。可能你没有将 l 设置为 10。

标签: java algorithm char int charat


【解决方案1】:

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

@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】:

    你的例子:

    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 的第二个参数损坏了。

    【讨论】:

      【解决方案3】:

      有趣的是,尽管我使用的是您发布的相同代码并且我得到了正确的答案。顺便说一句,你引用的例子 (10*1)+(9*1)+(8*4)+(7*3)+(6*2)+(5*0)+(4*7)+(3*8)+(2 *9)+(1*10) = 133。实际正确答案是164。

      【讨论】:

      • 是的,很抱歉。
      【解决方案4】:

      更简单的方法:

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

      【讨论】:

      • 非常感谢!但就代码质量而言,差别很大吗?
      • 在有问题的代码中,input.charAt(i) 是一个重复的递归调用,因此在此处被删除。使用foreach loop,无需传递,评估数组长度。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2023-03-31
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多