如何总结给定元素左侧的N个数组元素?

时间:2016-05-15 22:04:43

标签: java arrays sequence

很抱歉,如果问题很混乱,我是编程新手,我不知道如何制定它,甚至Google也无法理解我的次数。

我正在尝试解决某种Fibonnaci序列,但不是总结最后2个数字,而应该总结最后N个数字。

public double[] sequenceSum(double[] sequence) {
//some fancy method here
}

其中sequence.length实际上是你应该总结多少个数字。 所以如果电话是: seqeunceSum(1,2,3,4);

......序列应该继续{1,2,3,4,10,18,35,67 ...}。

如果通话是: seqeunceSum(1,0,1,0,1); ......序列应该继续{1,0,1,0,1,3,5,10,19,38 ....}。

序列有其局限性,当然,否则它是无限的,但我只需要帮助如何总结N个数组元素,在左边

非常感谢,

  

编辑:

谢谢,我从这里收到了一些意见,我解决了它。

是的,序列有限制,抱歉不包括在参数中,我根据之前的建议判断,询问最小和特定的问题。

这是我的代码:

public double[] sequenceSum(double[] sequence, int n) {
      double[] xArray = Arrays.copyOf(sequence, n);
      for(int i = sequence.length; i<n; i++){
      double sum = 0;
         for (int j=(i-sequence.length); j < i; j++) {
            sum += xArray[j];
            }
         xArray[i] = sum;
      }
      return xArray;
  }
}

谢谢大家,

2 个答案:

答案 0 :(得分:1)

最佳做法是保留可在自己/单独功能中重复使用的相同功能,因此您可以在程序中的任何其他位置使用此功能。 (它还使您的代码更具结构性和可读性)

因此,请在代码中添加以下函数:

public double sumAll(double[] numbers) {
    double result = 0;
    for(int i = 0 ; i < numbers.length; i++){
        result += numbers[i];
    }

    return result;
}

而且你可以在你的sequenceSum函数中调用它,如:

double sum = sumAll(sequence);
// Your code to create the next sequence elements...

另一个提示:如果你只是将这个函数用于Fibbonaci序列和类似的整数问题,请使用数据类型int,因为浮点数(在这种情况下为double)加起来浮点&#34; noise&#34;。 (您可以找到有关此问题的信息here

答案 1 :(得分:1)

首先,你应该对整数而不是双精数求和。如有必要,您可以将整数转换为双精度。

其次,您需要包含停止条件。我建议总长度。这将使方法签名:

public int[] sequenceSum(int[] sequence, int length)

不是给你代码,而是给你编写代码所需的步骤:

  1. 创建长度为length的int输出数组。

  2. 获取序列长度。

  3. 将序列数组复制到输出数组。

  4. 对从索引0到索引序列长度为1的序列值求和,并将总和添加到输出数组中。

  5. 重复步骤4,将1添加到起始索引并将1添加到结束索引,直到输出数组已满。