如何避免返回零

时间:2016-12-21 20:47:40

标签: java int factorization

我有代码工作,它是一个主要的分解方法类和测试器。它打印出的代码很好,但我被迫返回一个零值,因为该方法是一个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?

3 个答案:

答案 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)并且第五次调用。