Java实现阿姆斯特朗数判断时if条件不生效始终执行else问题
问题原因
if分支始终无法进入的核心错误是while循环执行完成后,变量n的值已经被修改为0:循环内反复执行n = n / 10的整除操作,当循环退出条件n != 0不满足时,n必然为0。此时判断条件temp == n等价于判断用户输入的原始值是否等于0,除了输入0的场景外条件永远不成立,因此只会进入else分支。
阿姆斯特朗数(三位数场景)的判定规则是:数字本身等于它每一位数字的立方和,你的判断逻辑对比对象完全错误,应该用保存了原始输入值的temp和循环中计算得到的各位立方和sum做相等判断。
具体错误点
- 直接在循环逻辑中修改了存储用户输入的变量
n,循环结束后n不再持有原始输入值,固定为0 - if分支判断的对比值错误,没有按照阿姆斯特朗数的规则将原始值和各位立方和
sum对比,反而和已经被修改为0的n对比
修正后可运行代码
import java.util.Scanner; public class ArmstrongNum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("ENTER THE NUMBER"); int n = sc.nextInt(); int temp = n; int rem = 0; int sum = 0; while (n != 0) { rem = n % 10; sum = sum + (rem * rem * rem); n = n / 10; } // 修正判断条件:原始输入值和各位立方和对比 if (temp == sum) { System.out.println("number is a AMSTRONG"); } else { System.out.println("NUMBER IS NOT AMSTRONG"); } } }
注:当前代码仅支持三位数的阿姆斯特朗数判断,如果需要支持任意长度的阿姆斯特朗数,需要先计算输入数字的位数,再将每一位数字做对应位数的幂次运算求和后再对比。
内容的提问来源于stack exchange,提问作者Amal Ks
相关产品推荐
相关产品推荐

