Java中的toCharArray有效,但元素总和无效

Java中的toCharArray有效,但元素总和无效,java,arrays,eclipse,recursion,character,Java,Arrays,Eclipse,Recursion,Character,我正在测试以下代码: 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 =

我正在测试以下代码:

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

结果必须是--->数组是5,3,2,1--->结果=5+3+2+1

您正在添加字符串字符的数字unicode值。幸运的是,这些值是连续的,因此您可以通过减去
'0'
的值将这些面值转换为它们表示的数字:

for (int j = 0; j < concatenatedN.length; j++) {
    sumDigits = sumDigits + (int)(concatenatedN[j] - '0'); 
} 
for(int j=0;j
当您将
char
转换为
int
时,它将转换为其基础int值,即其值。这显然不是你想要的。相反,您可以使用获取
int
值:

sumDigits = sumDigits + Character.getNumericValue(concatenatedN[j]); 

char
强制转换为
int
时,它将返回字符的ascii码,这不是您想要的,而是您期望的内容和实际输入的内容。另外,在询问之前不要忘记调试自己。所以这不是一个免费的调试服务。如果您在添加数组中的单个值时打印它们,您可以自己发现这一点。第一个
53
=5是一个提示。
sumDigits = sumDigits + Character.getNumericValue(concatenatedN[j]);