Java不自定义方法查找指定上限内完全数 错误输出问题求助
问题根因
核心错误是sum == n的判断逻辑放在了遍历真因数的while循环内部,还没枚举完当前数字的所有真因数就做相等校验,累加过程中sum暂时等于n时就会提前输出、跳出循环,没有计算剩余的真因数,最终出现大量误判结果。
修复方案
- 将完全数判断逻辑移到
while循环外部,等所有真因数累加完成后再校验 - 补充
java.util.Scanner的导包声明,否则编译器会识别不到Scanner类 - (可选)如果需要检测范围包含你输入的上限值,可将
for循环的条件从n < upper改为n <= upper
修复后完整代码
import java.util.Scanner; public class PerfectNumber { public static void main(String arg[]) { int upper; int sum = 0; int i; System.out.println("Enter upper limit"); Scanner stnd = new Scanner(System.in); upper = stnd.nextInt(); for(int n = 1; n < upper; n++) { i = 1; sum = 0; while (i <= n/2) { if (n%i == 0) { sum = sum + i; } i++; } // 所有真因数遍历完成后再做判断 if(sum == n) { System.out.println(n+" is a perfect number"); } } stnd.close(); } }
内容的提问来源于stack exchange,提问作者Pramit
相关产品推荐
相关产品推荐

