我正在测试以下代码段: 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 回答
![?](http://img1.sycdn.imooc.com/545861f00001be3402200220-100-100.jpg)
阿晨1998
TA贡献2037条经验 获得超6个赞
当您将 a转换char
为 an 时,int
它会转换为其基础 int 值,即其acsii值。这显然不是你想要的。相反,您可以使用Character.getNumericValue()
来获取int
值:
sumDigits = sumDigits + Character.getNumericValue(concatenatedN[j]);
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
元芳怎么了
TA贡献1798条经验 获得超7个赞
您正在添加字符串字符的数字 unicode 值。幸运的是,这些值是连续的,因此您可以通过减去 的值将这些面值转换为它们所代表的数字'0':
for (int j = 0; j < concatenatedN.length; j++) {
sumDigits = sumDigits + (int)(concatenatedN[j] - '0');
}
添加回答
举报
0/150
提交
取消