- Этот метод вычисляет сумму всех цифр в строке длиной 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; }
ответ
Я написал этот тест, и это зеленый:
@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(), как и я.
Ваш пример:
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
Или второй параметр суммы поврежден.
Забавно, хотя я пользуюсь тем же кодом, который вы указали, И я получаю правильные ответы. BTW пример, приведенный вами (10 * 1) + (9 * 1) + (8 * 4) + (7 * 3) + (6 * 2) + (5 * 0) + (4 * 7) + (3 * 8) + (2 * 9) + (1 * 10) = 133. самом деле правильный ответ 164.
да, извините. – ryan321
и ваша программа верна. :) –
простой способ:
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;
}
- 1. Суммы и целые числа Matlab
- 2. Преобразование строки в целые числа
- 3. Строки ввода и целые числа
- 4. Преобразование строки, содержащей несколько чисел в целые числа
- 5. Преобразование индекса строки в целые числа
- 6. целые числа и специальные символы в AngularJS
- 7. Преобразование нескольких отдельных списков в целые числа и получение суммы
- 8. Преобразование InputStream.read() в числа (не целые числа)
- 9. Преобразование символов в целые числа в Java
- 10. Преобразование удвоений в целые числа
- 11. преобразование одной строки в отдельные целые числа
- 12. Преобразование содержимого строки в целые числа
- 13. Преобразование строки в целые числа безопасным способом
- 14. Преобразование строки чисел в целые числа
- 15. Преобразование строки в целые числа, представляющие дату
- 16. Преобразование строк в целые числа
- 17. Преобразование строки ASCII в шестнадцатеричные целые числа
- 18. Целые числа и вычисления
- 19. Умножая числа и целые числа в Python
- 20. elisp векторы и символы/целые числа
- 21. C программирование - целые числа и символы
- 22. Чтение hexdump: целые числа и числа
- 23. Отрицательные целые числа> Положительные целые числа?
- 24. Обратные целые числа в Java
- 25. Девертирующие строки и целые числа пользовательского ввода
- 26. Преобразование строки данных учета в целые числа (положительные и отрицательные)
- 27. Сбор символов из строки и преобразование их в целые числа
- 28. Преобразование символов Ruby в целые числа
- 29. Целые числа в JavaScript
- 30. Java извлекает целые числа из строки, содержащей разделители и символы диапазона
"? 789x 12345" или "? 12 4567890", где '?' может лежать где угодно и имеет значение 0, «x» (если присутствует) лежит в конце строки и равно 10. «Ваш пример даже не такой формы – Fabinout
« 111? 111111 »из вашего кода является результатом 48 – maskacovnik
@ В этом случае цифры могут быть от 1 до 9, а не 0 и 10 (потому что они являются? И x) – Manu