我对Euler#25项目关于java.lang.NullPointerException的困惑

我对Euler#25项目关于java.lang.NullPointerException的困惑,java,algorithm,Java,Algorithm,我正在做Euler#25项目。我打算将所有斐波那契数保存在一个大整数数组中。然而,这里抛出了一个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=14

我正在做Euler#25项目。我打算将所有斐波那契数保存在一个大整数数组中。然而,这里抛出了一个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);
    }
私有静态BigInteger[]斐波那契;
公共静态void main(字符串[]args){
对于(int i=0;斐波那契[fibonacci.length-1]。toString().length()<1000;i++){
如果(i==0)
斐波那契[i]=biginger.ZERO;
如果(i<3)
斐波那契[i]=biginger.valueOf(1);
其他的
斐波那契[i]=斐波那契[i-1]。加上(斐波那契[i-2]);
}
System.out.println(斐波那契长度);
}

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

private static BigInteger[] fibonacci = new BigInteger[1000]; // Some number x
我建议使用
列表
而不是数组,因为您不知道数组的大小

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

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

private static BigInteger[] fibonacci = new BigInteger[1000]; // Some number x
我建议使用
列表
而不是数组,因为您不知道数组的大小

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

您从未初始化过
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);
private static int amount=1000;
私有静态BigInteger[]斐波那契=新的BigInteger[amount]();;
公共静态void main(字符串[]args){
对于(int i=0;i
您从未初始化过
斐波那契
数组

只用

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);
private static int amount=1000;
私有静态BigInteger[]斐波那契=新的BigInteger[amount]();;
公共静态void main(字符串[]args){
对于(int i=0;i
你知道什么是
null
?如果知道,你会自己发现错误。这在内存方面是非常低效的:因为你不知道需要计算多少个数字,所以当你达到容量时,你需要调整数组的大小,这可能会在某个时候占用大量内存。你只需要在一个位置存储两个数字任何时候都可以计算下一个。我建议你检查一下你的算法。提示:数组必须大于1000。你知道什么是
null
?如果是,你会自己发现错误。这在内存方面效率很低:因为你不知道需要计算多少个数字,所以当y时你需要调整数组的大小你达到了它的容量,这可能会在某些时候占用大量内存。你在任何时候只需要存储两个数字就可以计算下一个。我建议你检查一下你的算法。提示:数组必须大于1000。OP没有说他没有静态初始值设定项块!OP没有说他没有静态初始值设定项块!