我正在制作项目Euler#25。我打算在BigInteger数组中保存所有斐波纳契数。但是,抛出一个NullPointerException,我不知道为什么以及如何避免它。我知道有更简单的算法来解决这个问题。但我只是想知道我的错误在哪里,非常感谢你!以下是问题陈述:Fibonacci序列由递归关系定义:
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是第一项包含三位数。
Fibonacci序列中包含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);
}
答案 0 :(得分:3)
您尚未初始化数组fibonacci
。您需要在使用阵列之前分配内存。
private static BigInteger[] fibonacci = new BigInteger[1000]; // Some number x
我建议您使用List
而不是数组,因为您不知道数组的大小。
private static List<BigInteger> fibonacci = new ArrayList<BigInteger>();
此外,如果您正在使用数组,fibonacci[fibonacci.length - 1]
将无效,因为如果您将数组大小初始化为1000,则始终检查位置999.为此,您必须使用{{1然后你可以使用
ArrayList
答案 1 :(得分: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);