【问题标题】:How to avoid returning a zero如何避免返回零
【发布时间】:2016-12-21 20:47:39
【问题描述】:

我已经让代码工作了,它是一个主要的分解方法类和测试器。它可以很好地打印出代码,但我不得不返回一个零值,因为该方法是一个整数方法。

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

【问题讨论】:

    标签: java int factorization


    【解决方案1】:

    不要打印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,因此如果您从for 循环中删除i &lt;= num 测试,编译器将不会要求您在末尾添加return 0

    【讨论】:

    • facepalm 哇,谢谢。我不知道为什么我一开始完全忽略了 i++。还返回 i 而不是打印它要好得多。
    • 您在else 中带有i++ 的原始代码很好;你需要它来正确处理重复的因素。将其移入 for 循环现在只能工作,因为每次调用 nextFactor() 时循环都会重新启动。
    【解决方案2】:

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

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

    通过这个:

    fg.nextFactor();
    

    也就是说,nextFactor 的名字是错误的。即使它产生结果,顾名思义它是一个生成器,应该在每次调用时返回每个因子,内存效应由num 成员方法提供。 所以按照我的建议去做是可行的,但这可能不符合问题的精神。如果您必须检查/存储因素,而不仅仅是打印它们,John 的答案会更好。

    【讨论】:

    • 唯一的问题是上课,我们必须使用老师的测试仪。尽管这很愚蠢,但它是必需的。
    • 那么约翰的解决方案就是要走的路。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多