Хорошо, прежде всего, эта строка: int x=Integer.parseInt(t);
выполнит sh программу во время выполнения, потому что строка t
содержит пробелов . Поэтому вам нужно удалить это:
if (!t.isEmpty()) {
t += " ";
}
Во-вторых, синтаксический анализ строки t
для int является проблемой, потому что число в строке t
может быть очень, очень большим. Парсинг этого очень ... очень большого числа в int также вызовет исключение во время выполнения. Так что лучший способ сделать это - оставить его в виде строки, l oop поверх него и просто добавить в него цифры.
У меня есть два решения:
- I l oop на
t
и добавление цифр. - Я предполагаю, что у вас есть некоторые ограничения на размер
t
, чтобы его можно было проанализировать как int (или long), а затем использовать рекурсию по своему усмотрению.
public class Main {
public static void main(String[] args) {
String s = "hew";
String t = "";
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
int n = (int)ch - (int)'a' + 1;
t += String.valueOf(n);
}
System.out.println("t: "+t);
System.out.println("sum using string: " + getSumUsingString(t));
System.out.println("sum using int: " + getSumUsingLong(Long.parseLong(t), 0));
}
// the string function
private static long getSumUsingString(String t) {
long sum = 0;
for (int i = 0; i < t.length(); i++) {
sum += t.charAt(i)-48;
}
return sum;
}
// recursive function
private static long getSumUsingLong(long num, long sum) {
if (num==0) return sum;
sum += num % 10;
return getSumUsingLong(num / 10, sum);
}
}
Примечание:
Вы можете использовать, например, BigInteger класс в Java для работы с очень большими числами, если вы действительно нужно разобрать эту строку t
на число.