如何避免返回零

How to avoid returning a zero

我的代码可以正常工作,它是素因数分解方法 class 和测试器。它可以很好地打印出代码,但我不得不 return 一个零值,因为该方法是一个整数方法。

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 吗?

所有需要的打印都在 nextFactor 中完成。所以不要打印 return 代码。改变这个:

System.out.println(fg.nextFactor());

通过这个:

fg.nextFactor();

也就是说,nextFactor 这个名字是错误的。即使它产生了结果,顾名思义它是一个生成器,它应该在每次调用时 return 每个因子,num 成员方法提供了记忆效应。 所以按照我的建议行事,但这可能不符合问题的精神。如果您必须 examine/store 这些因素,而不仅仅是打印它们,约翰的回答会更好。

不要打印 nextFactor() 中的因数。 Return 他们

public int nextFactor() {
    for (int i = 2; ; i++) {
        if (num % i == 0) {
            num /= i;
            //System.out.println(i);
            return i;
        }
    }
}

测试 num % i == 0 最终保证 return 为真,因此如果您从 for 循环中删除 i <= num 测试,编译器将不需要您在末尾添加return 0

您的 hasMoreFactor() 方法在被调用四次(并且 nextFactor 分别返回 2、3、5、5)并被第五次调用时应该返回 false。