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

如何编写Java程序判断完全平方数,非完全平方数则输出因数?

解决方案

首先调整代码以处理整数输入(因数仅针对正整数有意义),并新增因数收集方法,以下是完整修改后的代码:

import java.util.Scanner;
import javax.swing.JOptionPane;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Labor1
{
    public static void main(String[] args)   
    {
        Scanner sc = new Scanner(System.in);  
        System.out.println("Enter a number: ");   
        // 改为int类型输入,避免double精度问题
        int number = sc.nextInt(); 

        if (checkPerfectSquare(number))
            JOptionPane.showMessageDialog(null,"PERFECT","ANSWER",JOptionPane.QUESTION_MESSAGE);  
        else {
            // 获取所有因数并格式化显示
            List<Integer> factors = getAllFactors(number);
            String result = "NOT PERFECT\nFactors: " + factors.toString().replace("[", "").replace("]", "");
            JOptionPane.showMessageDialog(null, result, "ANSWER", JOptionPane.QUESTION_MESSAGE);
        }
    }

    static boolean checkPerfectSquare(int number)   
    {
        if (number < 1) return false; // 非正整数不可能是完全平方数
        for(int i = 1; i * i <= number; i++)   
        {
            if((number % i == 0) && (number / i == i))   
            {
                return true;
            }
        }
        return false;  
    }

    // 收集并返回所有正因数的方法
    static List<Integer> getAllFactors(int number) {
        List<Integer> factors = new ArrayList<>();
        if (number < 1) {
            factors.add(0); // 非正整数返回空或提示,这里简单处理
            return factors;
        }
        // 遍历到平方根,减少循环次数
        for (int i = 1; i <= Math.sqrt(number); i++) {
            if (number % i == 0) {
                factors.add(i);
                // 避免重复添加完全平方数的平方根(此处已排除完全平方数,仍保留判断增强鲁棒性)
                if (i != number / i) {
                    factors.add(number / i);
                }
            }
        }
        Collections.sort(factors); // 对因数排序,输出更直观
        return factors;
    }
}

关键修改说明:

  • 输入类型调整:将double改为int,因为因数是针对整数的,且double处理大整数会有精度丢失问题。
  • 新增因数收集方法:getAllFactors通过遍历到输入数的平方根来高效收集因数,每找到一个因数i,同时添加对应的配对因数number/i,避免重复遍历整个数字范围。
  • 因数排序:使用Collections.sort对因数列表排序,让输出的因数按从小到大排列,更易读。
  • 边界处理:添加了非正整数的判断,避免无意义的因数计算。
  • 结果格式化:在非完全平方数分支中,将因数列表格式化为字符串,与"NOT PERFECT"一起显示在弹窗中。

内容的提问来源于stack exchange,提问作者Josh Andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:01:29