猿问

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

我正在测试以下代码段:


    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


弑天下
浏览 207回答 2
2回答

阿晨1998

当您将 a转换char为 an 时,int它会转换为其基础 int 值,即其acsii值。这显然不是你想要的。相反,您可以使用Character.getNumericValue()来获取int值:sumDigits&nbsp;=&nbsp;sumDigits&nbsp;+&nbsp;Character.getNumericValue(concatenatedN[j]);

元芳怎么了

您正在添加字符串字符的数字 unicode 值。幸运的是,这些值是连续的,因此您可以通过减去 的值将这些面值转换为它们所代表的数字'0':for (int j = 0; j < concatenatedN.length; j++) {&nbsp; &nbsp; sumDigits = sumDigits + (int)(concatenatedN[j] - '0');&nbsp;}&nbsp;
随时随地看视频慕课网APP

相关分类

Java
我要回答