这些是我对该程序的说明:
编写一个程序,要求用户输入一个整数(使用 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());
}
}
我该如何完成这项工作?
您正在使用变量数的中间值重新分配 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
,因此您永远不会使用因子
。
把它直接放在循环的末尾,并询问回合中是否没有发现任何因素。