我有代码工作,它是一个主要的分解方法类和测试器。它打印出的代码很好,但我被迫返回一个零值,因为该方法是一个Integer方法。
public class FactorGenerator{
private int num;
public FactorGenerator(int numberToFactor){
num = numberToFactor;
}
public int nextFactor(){
for(int i = 2; i <= num;){
if (num%i==0){
num = num/i;
System.out.println(i);
}
else{
i++;
}
}
return 0;
}
public boolean hasMoreFactors(){
for(int i = 1; i < num; i++){
if(num % i == 0){
return true;
}
}
return false;
}
}
这是我正在使用的测试人员,无法更改,必须保持不变:
import java.util.Scanner;
public class FactorPrinter{
public static void main(String [] args){
Scanner in = new Scanner(System.in);
System.out.print("Enter a number to Factor:");
int numberToFactor = in.nextInt();
System.out.println("You chose: "+numberToFactor+" to factor.");
FactorGenerator fg = new FactorGenerator(numberToFactor);
while (fg.hasMoreFactors())
System.out.println(fg.nextFactor());
}
}
当我输入150时,它会打印2,3,5,5,0 反正有没有删除0?
答案 0 :(得分:3)
不要打印 nextFactor()
中的因素。 返回他们。
public int nextFactor() {
for (int i = 2; ; i++) {
if (num % i == 0) {
num /= i;
//System.out.println(i);
return i;
}
}
}
测试num % i == 0
最终会保证返回true,因此如果从i <= num
循环中删除for
测试,则编译器不会要求您添加{{1}最后。
答案 1 :(得分:2)
所有必需的打印都在nextFactor
完成。所以只是不要打印返回代码。改变这个:
System.out.println(fg.nextFactor());
由此:
fg.nextFactor();
也就是说,nextFactor
这个名字的名字不合适。即使它产生结果,名称也表明它是一个生成器,应该在每次调用时返回每个因子,记忆效应由num
成员方法提供。
所以做我建议的工作,但它可能不是问题的精神。如果你必须检查/存储因子,不仅打印它们,John的答案会更好。
答案 2 :(得分:0)
您的hasMoreFactor()
方法应该在调用四次时返回false(并且nextFactor
分别返回2,3,5,5)并且第五次调用。