2015-07-16 3 views
4
  • Этот метод вычисляет сумму всех цифр в строке длиной 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', но для тех, которые этого не делают, он возвращает значение sum как 0. Например, для " 111? 111111 "вместо возврата 48, он возвращает 0.
  • Я не могу узнать об ошибке. Пожалуйста помоги.Преобразование строки (содержащей символы и целые числа) в целые числа и вычисление суммы в JAVA

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

"? 789x 12345" или "? 12 4567890", где '?' может лежать где угодно и имеет значение 0, «x» (если присутствует) лежит в конце строки и равно 10. «Ваш пример даже не такой формы – Fabinout

+3

« 111? 111111 »из вашего кода является результатом 48 – maskacovnik

+0

@ В этом случае цифры могут быть от 1 до 9, а не 0 и 10 (потому что они являются? И x) – Manu

ответ

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

Ваш пример:

111?111111 

Ожидаемый результат: 48

, если я позвоню:

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

результат 48

Может быть, вы вызываете метод, как это:

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

There результат 0

Или второй параметр суммы поврежден.

2

Забавно, хотя я пользуюсь тем же кодом, который вы указали, И я получаю правильные ответы. BTW пример, приведенный вами (10 * 1) + (9 * 1) + (8 * 4) + (7 * 3) + (6 * 2) + (5 * 0) + (4 * 7) + (3 * 8) + (2 * 9) + (1 * 10) = 133. самом деле правильный ответ 164.

+0

да, извините. – ryan321

+0

и ваша программа верна. :) –

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

Большое спасибо! Но с точки зрения качества кода это имеет большое значение? – ryan321

+0

В коде, отправленном в вопрос, 'input.charAt (i)' является повторным, рекурсивным вызовом и удаляется здесь. С 'foreach loop', нет необходимости передавать, оценивать длину массива. – Rajesh

Смежные вопросы