为何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
相关产品推荐
相关产品推荐

