线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:-1 at Fibonacci.main(Fibonacci.java:15)

时间:2013-09-01 21:10:30

标签: java arrays types

我必须找出一种方法来确定在我们有位溢出之前数据类型长的Fibonacci序列的迭代次数。我经常收到错误:

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]);
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

你应该使用

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

答案 1 :(得分:0)

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

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

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