如何确定java.lang.ArrayIndexOutOfBoundsException的原因?

如何确定java.lang.ArrayIndexOutOfBoundsException的原因?,java,debugging,Java,Debugging,这是以下内容的延续: 我一直在 尝试运行代码时出现java.lang.ArrayIndexOutOfBoundsException错误。我得到了第63行和第40行的错误,它们是 63: int fib = dictionary[num]; // dictionary is a class level array. 40: answer = fibonacci(num); // Answer is an int calling the fibonacci function and passing

这是以下内容的延续:

我一直在 尝试运行代码时出现
java.lang.ArrayIndexOutOfBoundsException
错误。我得到了第63行和第40行的错误,它们是

63: int fib = dictionary[num]; // dictionary is a class level array.
40: answer = fibonacci(num); // Answer is an int calling the fibonacci function and passing "num" to it.
以下是完整的代码:

import javax.swing.JOptionPane;

public class question2
{

//class variable
static int count = 0;
static int [] dictionary;


//main method
public static void main(String[] args)
{

//user input
int num = Integer.parseInt(JOptionPane.showInputDialog("Enter num:")), answer;

//Catches negative numbers, exits
if (num < 0) 
{
    JOptionPane.showMessageDialog(null,"ERROR: fibonacci sequence not defined for negative   numbers.");
    System.exit(1);
 }

//info dialog
JOptionPane.showMessageDialog(null,"About to calculate fibonacci("+num+")");

//giving the array "num" elements
dictionary = new int [num];

//fill array with 0
for (int i=0; i<dictionary.length;i++)
dictionary[i]=0;

//adds value of 1 for fib(1)    
if (dictionary.length>=2)
dictionary[1]= 1;

//method call
answer = fibonacci(num);

//output
JOptionPane.showMessageDialog(null,"Fibonacci("+num+") is "+answer+" (took "+count+" calls)");
}


  static int fibonacci(int num)
  {
count++;

// Base cases: f(0) is 0, f(1) is 1
if (num==0)
return 0;

if (num==1)
return 1;

// Other cases: f(num) = f(num-1) + f(num-2)/
else 
{

  //check array for value
  int fib = dictionary[num];

  //add new value to array
  if (fib==0) 
  {
    fib = fibonacci(num-1) + fibonacci(num-2);
    dictionary[num] = fib;
  }
  return fib;
}

  }


} //class terminator
import javax.swing.JOptionPane;
公开课问题2
{
//类变量
静态整数计数=0;
静态int[]字典;
//主要方法
公共静态void main(字符串[]args)
{
//用户输入
int num=Integer.parseInt(JOptionPane.showInputDialog(“输入num:”),回答;
//捕捉负数,退出
if(num<0)
{
showMessageDialog(null,“错误:未为负数定义斐波那契序列”);
系统出口(1);
}
//信息对话框
showMessageDialog(null,“即将计算斐波那契(“+num+”));
//给数组指定“num”元素
dictionary=newint[num];
//用0填充数组
对于(int i=0;i=2)
字典[1]=1;
//方法调用
答案=斐波那契(num);
//输出
showMessageDialog(null,“Fibonacci(+num+”)是“+answer+”(take“+count+”calls)”);
}
静态整数斐波那契(整数)
{
计数++;
//基本情况:f(0)为0,f(1)为1
如果(num==0)
返回0;
如果(num==1)
返回1;
//其他情况:f(num)=f(num-1)+f(num-2)/
其他的
{
//检查数组的值
int fib=字典[num];
//向数组添加新值
如果(fib==0)
{
fib=fibonacci(num-1)+fibonacci(num-2);
字典[num]=fib;
}
返回fib;
}
}
}//类终止符

数组的大小为
num
int fib=dictionary[num];
),因此您可以访问的最大索引是
num-1
。您尝试访问索引
num
dictionary[num]=fib;
),这超出了范围。

数组的大小为
num
int fib=dictionary[num];
),因此您可以访问的最大索引是
num-1
。你试图访问索引
num
dictionary[num]=fib;
),这是不允许的。

如果你完全被这类事情困住了,用调试器去做就是了。如果你完全被这类事情困住了,用调试器去做就是了。快速修复:在输入的数字上加1,并调用
fibonacci(num-1)
QuickFix:在输入的号码中添加1,然后调用
fibonacci(num-1)