这个异常是Java中的数组越界问题
当你使用不合法的索引访问数组是会出现这种错误
例如:
class Solution { public static int climbStairs(int n) { if (n == 1 || n == 2) { return n; } int[] demo = new int[n]; demo[1]=1; demo[2]=2; for (int i = 3; i <=n; i++) { demo[i] = demo[i-1] + demo[i-2]; } return demo[n]; } } public class palouti { public static void main(String[] args) { System.out.println(Solution.climbStairs(3)); } }
发生这种错误的原因是:
在这个地方开辟数组长度为n
int[] demo = new int[n];
而在下面的使用中
for (int i = 3; i <=n; i++) { demo[i] = demo[i-1] + demo[i-2]; }
无论n的值为多少都会超出界限
因为数组的索引是从 0 开始的,前面开辟的长度每次都差了一位
例如:n=3时,在 for 循环的索引中,都会索引到 demo[3],而从 0 开始索引,到demo[3]时,就相当于从 0-1-2-3,超出了数组界限
解决方法也很简单
只要将
int[] demo = new int[n];
改为
int[] demo = new int[n+1];
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException:
这个异常会经常遇到,只要注意数组的界限,就可以避免了