charAt函数输出异常求助:str为30时charAt(0)返回51
阿姆斯特朗数函数的问题修复
核心问题:字符转数字错误
str.charAt(i)返回的是字符的ASCII码值,比如字符'3'对应的ASCII码就是51,这不是你要的数字3。要把字符转成对应整数,只需要用str.charAt(i) - '0'——因为ASCII表中'0'到'9'是连续排列的,用目标字符减去'0'的ASCII值,就能得到对应的数字。
代码里的其他错误
除了字符转数字的问题,你的代码还有两个关键bug:
- 内层循环始终取
str.charAt(0),也就是只处理第一个数位,比如数字30只会计算3的幂,完全忽略了0这个数位; result=+Math.pow(base,len)是赋值操作,不是累加,每次循环都会把result覆盖成当前的幂值,正确的写法应该是result += Math.pow(...)。
修复后的完整代码
private static void handleArmstrong(int parameter) { for (int number = 0; number <= parameter; number++) { String str = Integer.toString(number); int len = str.length(); double result = 0; for (int i = 0; i < len; i++) { // 字符转数字:减去'0'的ASCII值 int base = str.charAt(i) - '0'; // 累加每个数位的len次幂 result += Math.pow(base, len); } // 判断是否是阿姆斯特朗数并输出 if (result == number) { System.out.println(number + " 是阿姆斯特朗数"); } } }
额外说明
- 把
number < parameter+1改成number <= parameter,逻辑更清晰,效果一致; - 阿姆斯特朗数的定义是:一个n位数,其各位数字的n次方之和等于它本身,比如153=1³+5³+3³,修复后的代码会正确计算并输出符合条件的数。
内容的提问来源于stack exchange,提问作者Xayyna
相关产品推荐
相关产品推荐

