调用方法和其他有趣的东西

时间:2015-04-16 17:46:40

标签: java arrays methods

我正在开发一个项目来创建一个系统,输入一个数字序列将为我提供最简单的多项式方程。现在我有一些问题,因为大多数新手现在都会有。我正在编写一个方法来执行以下操作:

  1. 重复计算序列中相邻数字之间的差异,直到序列中的每个数字相同:

  2. [1,1,5,13,​​25]⇒[0,4,8,12]⇒[4,4,4]

    新术语的指数是上面的步数,即2。

  3. 新术语的系数是最终序列上的数字除以指数的阶乘,即4/2!因此,新术语是2x ^ 2.

  4. 我所做的是创造三种方法。我不确定这是不是正确的方法,而是我所做的。

    我创建了一种方法来查找输入序列之间的差异,然后将它们存储在另一个数组中。 (来自这里令人敬畏的社区的帮助很棒)

    其次,我创建了一种方法来查找术语的阶乘。我正在写下面的两种方法以及一种查找所有术语是否相等的方法。

    因子:

    public int factorial(int x) {
        for (int i=1;i<=x;i++){
            x = x*i;
        }
        return x;
    }
    

    AllEqual:

    public boolean allEqual() {
        boolean checker = true;
        double first = sequence[1];
        for (int i = 1; i<sequence.length ; i++){
            if(sequence[i] == first){
                checker = true;
            }
        }
    }
    

    的差异:

    public double[] differences() {
        double[] diffs = new double[sequence.length - 1];
        for(int i = 0;i<=sequence.length;i++){
            diffs[i] = sequence[i+1]- sequence[i];
        }
        return null;
    }
    

    我知道我需要在循环中使用差异方法。我不确定这一点,因为如果我在循环中使用它然后在循环的下一次迭代中,循环应该在名为diffs的数组上运行而不是序列。

1 个答案:

答案 0 :(得分:1)

嗯,一件好事就是改变你的differences方法,使它或多或少地像这样:

public double[] differences(double[] sequence) {
    double[] diffs = new double[sequence.length - 1];
    for(int i = 0;i<=sequence.length;i++){
        diffs[i] = sequence[i+1]- sequence[i];
    }
    return diffs;
}

通过这样做,我们将此方法转换为无副作用的函数。它仅适用于提供的参数并返回一些值(它具有参照完整性)。如上面其中一条评论所述,这种方法有一个巨大的优势。现在,您可以以多种不同的方式重用和组合对此函数的调用,而不必将其绑定到某个字段。

现在,您需要计算某个序列的差异,直到所有值都相等,并返回执行此操作所需的步骤数。你可以在这里使用递归解决方案

public int stepsUntilEqual(double[] sequence) {
   if (allEqual(sequence)) {
      return 0;
   } else {
      double[] diffs = differences(sequence);
      return 1 + stepsUntilEqual(diffs); //One more steps that the steps needed to get the differences equal
   }
}

你会注意到&#34; allEqual&#34;函数也必须更改为使用参数而不是字段

public boolean allEqual(double[] sequence) {
   ...
}

非递归解决方案 自从访问最后的差异&#34;在这种情况下,可能需要一个非递归解决方案:

   double[] lastSequence = sequence;
   int steps = 0;
   while ( !allEqual(lastSequence)) {
      lastSequence = differences(lastSequence);
      steps++;
   }

   //Now steps contains the number of iterations
   //lastSequence contains the value you will to use for calculating the coefficient