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

为何for循环嵌套while循环陷入无限循环?求1-500阿姆斯特朗数调试

问题分析与修复方案

问题1:无限循环的根源

你在while循环里直接修改了for循环的迭代变量s——每次进入while循环,s会被不断除以10直到变成0。当while循环结束后,for循环执行s++,s从0变成1,接着又进入下一轮循环,重新把s改成0,如此往复,就陷入了无限循环。

问题2:if语句永远不执行的原因

当while循环结束时,s的值已经是0了,而total存储的是原数字的各位立方和(比如原数是1时,total=1),显然total不可能等于0(除非原数是0,但你的循环从1开始),所以total==s的条件永远不成立,自然不会执行打印。

修复后的代码

核心思路是用临时变量保存当前要计算的数字,不要修改for循环的迭代变量s:

for(int s=1; s<=500; s++)
{  
    int total=0;
    // 用临时变量num代替s进行数位拆分,避免修改原循环变量
    int num = s;
    while(num != 0) {
        int digit = num % 10;
        total = total + (digit*digit*digit);
        num = num / 10;
    }
    if (total == s) {
        System.out.println(s);
    }
}

运行结果说明

这段代码会正确打印1到500之间的阿姆斯特朗数:1、153、370、371、407。

内容的提问来源于stack exchange,提问作者Doulat Ghuman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:07:49