Создать статический метод sumDigits, чтобы он считал сумму цифр в числе и возвращал сумму в результате своей работы

Нужно реализовать статический метод sumDigits, чтобы он считал сумму цифр в числе и возвращал сумму в результате своей работы. Для реализации метода желательно использовать методы:

  • класса Integer: toString(), parseInt();

  • класса String: charAt(), length(), valueOf(). У меня получился такой код:

public class Main
{
    public static void main(String[] args)
    {
        System.out.println(sumDigits(5059191));
    }

    public static int sumDigits(Integer number)
    {
        String i =  Integer.toString(number);
        char[] chars = i.toCharArray();
        int i1 = Character.getNumericValue(chars[5]);
        int i2 = Character.getNumericValue(chars[0]);
        int i3 = Character.getNumericValue(chars[5]);
        int i4 = Character.getNumericValue(chars[9]);
        int i5 = Character.getNumericValue(chars[1]);
        int i6 = Character.getNumericValue(chars[9]);
        int i7 = Character.getNumericValue(chars[1]);
        int sum = i1+i2+i3+i4+i5+i6+i7;
        return sum;
    }

То есть я в жалких попытках посчитать сумму цифр в числе "5059191". Однако мне выдаёт ошибку: *"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 7".* Можете подсказать где я накосячила?


Ответы (2 шт):

Автор решения: Sergei Buvaka

Вот в этой строке

int i6 = Character.getNumericValue(chars[9]);

вы обращаетесь к элементу массива номер 9, а вашем массиве только 7 значений.

И вообще в вашем методе происходит какая-то дичь. Вам нужно написать метод вроде такого:

int sum = 0;
 
for (int i = 0; i < chars.length; i++){
    sum = sum + Character.getNumericValue(chars[i]);
}

return sum;

Ну и в догонку исходя из того, что у вас написано вы видимо не совсем понимаете концепцию массива. Вам стоит подумать и почитать на тему что значит запись

Character.getNumericValue(chars[5]);
→ Ссылка
Автор решения: Дмитрий

Переводить int в char или string - так себе идея. Все проще:

public static int sumDigits(int number) {
    int sum = 0;
    while (number > 0) {
        sum += number % 10;
        number/=10;            
    }
    return sum;
}

Если хотите конвертировать в стринг и обратно, то примерно так:

public static int sumDigits(int number) {
    int sum = 0;
    for (String s : String.valueOf(number).split("")) sum+=Integer.valueOf(s);
    return sum;
}
→ Ссылка