我正在测试以下代码:
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
答案 0 :(得分:1)
您要添加字符串字符的数字unicode值。幸运的是,这些值是连续的,因此您可以通过减去'0'
的值将这些面部值转换为它们代表的数字:
for (int j = 0; j < concatenatedN.length; j++) {
sumDigits = sumDigits + (int)(concatenatedN[j] - '0');
}
答案 1 :(得分:1)
将char
转换为int
时,它会转换为其基础的int值,即其acsii值。这显然不是您想要的。相反,您可以使用Character.getNumericValue()
来获取int
值:
sumDigits = sumDigits + Character.getNumericValue(concatenatedN[j]);