0

我必须想出一种方法来确定在我们有位溢出之前数据类型 long 将持有多少次斐波那契数列迭代。我经常收到错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at Fibonacci.main(Fibonacci.java:15). 

我尝试增加数组的长度,我尝试使用 arraylist 数据类型(由于无知并且不了解我对它的研究,我回到了一个空数组),我尝试不使用一个数组,但后来被告知我必须这样做。)这是我的代码,我确实有一行将计数器减少了一个。我在尝试调试我的代码时把它撕掉了。我非常感谢任何/所有帮助。

import javax.swing.JOptionPane;

public class Fibonacci {
    public static void main(String[] args) {
        long[] f = new long[9000];

        int k = 1;
        f[0] = 0;
        f[1] = 1;

        while (f[k] > 0) {
            f[k] = f[k - 1] + f[k - 2];
            k++;
        }


        System.out.println("The number of Fibonacci numbers a computer can compute with the data type long is " + k);
        System.out.println(k + "th Fibonacci number is " + f[k]);
    }
}
4

2 回答 2

1
while (f[k] > 0) {
    f[k] = f[k - 1] + f[k - 2];
    k++;
}

如果k == 1,您尝试访问f[0]and f[-1],这显然不存在,因为数组索引从0, not开始-1

你应该使用

while (f[k] > 1) {
    f[k] = f[k - 1] + f[k - 2];
    k++;
}
于 2013-09-01T21:12:09.350 回答
0

您应该通过以下方式更改您的 while 循环:

while (f[k] > 0)
{
    f[k+1] = f[k] + f[k - 1];
    k++;
}

因此,在第一次迭代中,您将尝试访问存储在索引 0 和 1 中存在的值,从而在不修改您的算法的情况下解决 OutOfBoundsException,因为 f[1] 是已知的。

于 2013-09-01T21:25:00.327 回答