【问题标题】:Generate a factor array and print it contents生成一个因子数组并打印它的内容
【发布时间】:2015-02-21 01:52:20
【问题描述】:

如何创建一个包含整数数组的方法,然后在从主类调用该方法时允许该特定方法打印该数组的所有元素?

这是我做的一个程序作为例子: 我试图找到int 输入的所有可能因素。我使用了一种名为generateFactors() 的方法来存储一个数字的所有可能因子,但由于某种原因我无法打印数组元素。在toString()方法中,有错误说void type not allowed here!

public class FactorNumbers {

    private int number;

    public FactorNumbers(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public void generateFactors() {
        int[] factors = new int[number];

        for (int i = 0; i < number; i++) {
            if ((i + 1 % number) == 0) {
                factors[i] = i;
                System.out.println("Factor= " + i);
            } else {
                factors[i] = 0;
            }
        }
        for (int i = 0; i < number; i++) {
            System.out.println(factors[i] + "");
        }
    }

    @Override
    public String toString() {
        return "The factors of " + number + "are: " + generateFactors();
    }

}

【问题讨论】:

  • toString 方法中不能有 generateFactors() ,除非它实际上返回一个字符串。
  • 您可以将整数列表作为类的成员变量。
  • generateFacors() 函数不返回任何内容。而不是打印出generateFactors()函数中的数字,而是将这些数字添加到某种列表中并返回它而不是void。
  • generateFactors 方法设为String 返回类型,然后使用java.util.Arrays.toString 返回数组的值。

标签: java arrays methods tostring void


【解决方案1】:

为了执行您想要执行的操作,代码必须如下所示:

    public String generateFactors() {
    String ret = "";
    int[] factors = new int[number];

    for (int i = 0; i < number; i++) {
        if ((i + 1 % number) == 0) {
            factors[i] = i;
            ret += "Factor= " + i + "\n";
        } else {
            factors[i] = 0;
        }
    }
    for (int i = 0; i < number; i++) {
        ret += factors[i] + "\n";
    }
    return ret;
}

但是,您的代码不会返回因子,我认为您真正想要做的是这样的:

 public String generateFactors() {
    String ret = "";
    int[] factors = new int[number];

    for (int i = 0; i < number; i++) {
        //The remainder needs to be reversed
        if ((number % (i + 1)) == 0) {
            factors[i] = i+1;
        } else {
            factors[i] = 0;
        }
    }
    for (int i = 0; i < number; i++) {
        //only print them if they are a factor
        if(factors[i] != 0)
            ret += factors[i] + "\n";
    }
    return ret;
}

【讨论】:

  • 您在每次迭代中创建一个新字符串。您应该改用 StringBuilder。
【解决方案2】:

改变你的方法如下: 如果需要,您可以使用字符串生成器。

 public String generateFactors() {
    int[] factors = new int[number];
    String strPrint = "";
    for (int i = 0; i < number; i++) {
        if ((i + 1 % number) == 0) {
            factors[i] = i;
            strPrint = strPrint + "Factor= " + i + "\n"
           //System.out.println("Factor= " + i);
        } else {
            factors[i] = 0;
        }
    }
    for (int i = 0; i < number; i++) {
        strPrint = strPrint + factors[i] + "\n"
       // System.out.println(factors[i] + "");
    }
   return strPrint;
}

【讨论】:

    【解决方案3】:

    toString() 方法不适用于数组和返回 void 的方法。而是使用 Arrays.toString(array)

    public static void main(String[] args) {
        FactorNumbers fn = new FactorNumbers(100);
        int[] factors = fn.generateFactors();
        System.out.println(Arrays.toString(factors));
    }
    

    在您的 ma​​in 方法中打印数组中包含的所有值,并将您的 generateFactors() 方法重构为:

    public int[] generateFactors() {
            int[] factors = new int[number];
    
            for (int i = 0; i < number; i++) {
                if ((i + 1 % number) == 0) {
                    factors[i] = i;
                    System.out.println("Factor= " + i);
                } else {
                    factors[i] = 0;
                }
            }
            return factors;
        }
    

    注意: 但是,您的代码不会给您任何因素,因为:

    if ((i + 1 % number) == 0) 
    

    将始终返回 false。将其替换为:

    if((number % i+1) == 0)
    

    获得正确的输出。

    【讨论】:

    • 他想退回而不是打印出来。
    猜你喜欢
    • 2017-11-20
    • 2014-04-02
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多