0

我正在研究 Project Euler #25。我打算将所有斐波那契数保存在 BigInteger 数组中。但是,会抛出 NullPointerException,我不知道为什么以及如何避免它。我知道有更简单的算法来解决这个问题。但我只想知道我的错误在哪里,非常感谢!这是问题状态:斐波那契数列由递归关系定义:

Fn = Fn-1 + Fn-2,其中 F1 = 1 和 F2 = 1。因此前 12 项将是:

F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144 第12项F12是第一个包含三位数字的项.

斐波那契数列中包含 1000 位数字的第一项是什么?

我的代码如下:

  private static BigInteger[] fibonacci;
    public static void main(String[] args) {
        for(int i = 0; fibonacci[fibonacci.length-1].toString().length() < 1000; i++){
            if(i == 0)
                fibonacci[i] = BigInteger.ZERO;
            if(i < 3)
                fibonacci[i] = BigInteger.valueOf(1);
            else
                fibonacci[i] = fibonacci[i - 1].add(fibonacci[i - 2]);
        }
        System.out.println(fibonacci.length);
    }
4

2 回答 2

3

您尚未初始化数组fibonacci。您需要在使用数组之前分配内存。

private static BigInteger[] fibonacci = new BigInteger[1000]; // Some number x

鉴于您不知道数组的大小,我建议您使用 aList而不是数组。

private static List<BigInteger> fibonacci = new ArrayList<BigInteger>();

此外,如果您使用的是数组,fibonacci[fibonacci.length - 1]则将不起作用,因为如果您将数组大小初始化为 1000,则始终检查位置 999。为此,您必须使用 anArrayList然后您可以使用

fibonacci[fibonacci.size() - 1]
于 2013-05-04T10:22:22.617 回答
3

你从来没有初始化你的fibonacci数组。

只需使用

private static BigInteger[] fibonacci = new BigInteger[1000]();

或更好地将您要计算的斐波那契数的数量提取为一个单独的常数:

private static int amount = 1000;
private static BigInteger[] fibonacci = new BigInteger[amount]();;

public static void main(String[] args) {
  for(int i = 0; i < amount; i++){
    if(i == 0)
      fibonacci[i] = BigInteger.ZERO;
    else if(i < 3)
      fibonacci[i] = BigInteger.valueOf(1);
    else
      fibonacci[i] = fibonacci[i - 1].add(fibonacci[i - 2]);
}

System.out.println(fibonacci.length);
于 2013-05-04T10:23:06.073 回答