toCharArray в Java работает, но сумма элементов не - PullRequest
0 голосов
/ 27 октября 2018

Я тестирую следующий фрагмент кода:

    static int superDigit(String n, int k) {
    char[] concatenatedN = n.toCharArray();        
    int superDigit = 0;
    int sumDigits = 0;
    char[] totalSum;

    if (n.length() > 0) {
        sumDigits = 0;
        for (int j = 0; j < concatenatedN.length; j++) {
            sumDigits = sumDigits + (int)concatenatedN[j]; 
            System.out.println(" sumDigits: " + sumDigits + " ,concatenatedN[j]: " + concatenatedN[j]);
        }      
        totalSum = String.valueOf(sumDigits * k).toCharArray();
        superDigit = sumDigitsRecursive(totalSum);

    } //end if
    return superDigit;
}

По какой-то причине я не знаю, что переменная sumDigits должна быть суммой элементов массива (concatenatedN [j]), но происходит нечто странное ивместо суммы показывается следующий вывод (когда я делаю System.out.println):

 sumDigits: 53 ,concatenatedN[j]: 5
 sumDigits: 104 ,concatenatedN[j]: 3
 sumDigits: 154 ,concatenatedN[j]: 2
 sumDigits: 203 ,concatenatedN[j]: 1

Результат должен быть ---> массив 5,3,2,1 ---> результат= 5 + 3 + 2 + 1

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Когда вы преобразуете char в int, оно преобразуется в его базовое значение int, которое является его значением acsii .Это явно не то, что вы хотите.Вместо этого вы можете использовать Character.getNumericValue(), чтобы получить значение int:

sumDigits = sumDigits + Character.getNumericValue(concatenatedN[j]); 
0 голосов
/ 27 октября 2018

Вы добавляете числовые значения Unicode символов строки.К счастью, эти значения являются последовательными, поэтому вы можете преобразовать эти номиналы в числа, которые они представляют, вычитая значения '0':

for (int j = 0; j < concatenatedN.length; j++) {
    sumDigits = sumDigits + (int)(concatenatedN[j] - '0'); 
} 
...