You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:57:10