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

Java不自定义方法查找指定上限内完全数 错误输出问题求助

问题根因

核心错误是sum == n的判断逻辑放在了遍历真因数的while循环内部,还没枚举完当前数字的所有真因数就做相等校验,累加过程中sum暂时等于n时就会提前输出、跳出循环,没有计算剩余的真因数,最终出现大量误判结果。

修复方案

  1. 将完全数判断逻辑移到while循环外部,等所有真因数累加完成后再校验
  2. 补充java.util.Scanner的导包声明,否则编译器会识别不到Scanner类
  3. (可选)如果需要检测范围包含你输入的上限值,可将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:09:00