提问者:小点点

质因数分解程序 Java


这些是我对该程序的说明:

编写一个程序,要求用户输入一个整数(使用 JOptionPane),然后打印出其素数分解。

例如,当用户输入 150 时,程序应打印“150 的质因数分解:2 3 5 5”。

使用带有方法nextFactor和hasMoreFactors(谓词方法)的类FactorGenerator。实例字段应为数字和因子。hasMoreFactors 方法应将因子初始化为 2,并使用 while 循环递增因子,直到因子均匀地划分为数字(在这种情况下,hasMoreFactors 返回值 true)或因子变得太大(在这种情况下,hasMoreFactors 返回值 false)。

在FactorGeneratorTest中,应该允许用户输入任意数量的整数。输入应继续,直到按下取消按钮。建议输入的整数为 30、100、2310 和 27225。

这是我到目前为止的因子生成器类:

package primeFactorization;

public class FactorGenerator {

public FactorGenerator(double input) {
    number = input;
}

public String hasMoreFactors() {
    factor = 2;
    boolean loop = true;
    primeFactors = "Prime Factors are: ";
    while(loop) {
        if(number % factor == 0) {
            number = number / factor;
            primeFactors = (number + ", ");
            }
            if(factor > number) {
                loop = false;
            }
            if(number % factor != 0) {
                factor++;
            }
            if(number < 2) {
                loop = false;
            }
        }
        return primeFactors;
    }

    private String primeFactors;
    private boolean hasFactor;
    private double number;
    private double factor;
}

这是我的测试类:

package primeFactorization;

import javax.swing.JOptionPane;

public class FactorGeneratorTest 
    {
    public static void main(String[]args) {
        String input = JOptionPane.showInputDialog("Enter a number. ");
        Double num = Double.parseDouble(input);

        FactorGenerator factors = new FactorGenerator(num);

    System.out.println(factors.hasMoreFactors());
}
}

我该如何完成这项工作?


共2个答案

匿名用户

您正在使用变量数的中间值重新分配 hasMoreFactors() 方法中的字符串变量 primeFactors。素数因子应与素因数的值(即可变因子的值)连接。hasMoreFactors() 应该如下所示:

public String hasMoreFactors() {
        factor = 2;
        boolean loop = true;
        primeFactors = "Prime Factors are: ";
        while (loop) {
            if (number % factor == 0) {
                number = number / factor;
                primeFactors += (factor + ", ");
            }
            if (factor > number) {
                loop = false;
            }
            if (number % factor != 0) {
                factor++;
            }
            if (number < 2) {
                loop = false;
            }
        }
        return primeFactors;
    }

匿名用户

示例:输入是 35,您从因子 2 开始,但 35 % 2 = 1,因此您永远不会使用因子
把它直接放在循环的末尾,并询问回合中是否没有发现任何因素。