我必须找出一种方法来确定在我们有位溢出之前数据类型长的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]);
}
}
答案 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]已知。