我正在尝试运行一个调用我的类方法的方法。每次我调用computeIterative()方法时,都会得到一个ArrayIndexOutOfBoundsException。我添加了一些代码来打印循环,我发现异常发生在第二次循环中,但循环一直持续到完成。我做错了什么,我无法解决这个数组异常?
static int computeIterative(int n) {
efficiency = 0;
int[] a = new int[n];
int firstInt = 0;
int secondInt = 1;
int results = 0;
if (n > 1) {
a[0] = 0;
a[1] = 1;
for (int i = 2; i <= n; ++i) {
efficiency++;
firstInt = a[i-1];
secondInt = a[i-2];
results = 2 * firstInt + secondInt;
System.out.println("Loop " + efficiency + " of " + n );
System.out.println(firstInt);
System.out.println(secondInt);
System.out.println("Results: " + results);
a[i] = results;
}
} else {
a[0] = 0;
a[1] = 1;
}
return a[n];
}
感谢您的帮助。
答案 0 :(得分:3)
错误在于
行a[i] = results;
因为在你的for循环中,你一直在使用:
for(i=2;i<=n;i++)
您会发现数组索引从0开始并上升到n-1。所以当你使用时:
i <= n
你会遇到一个超出范围的数组异常,因为它没有'n'元素。
从以下位置更改for循环条件:
i <= n
到:
i < n
并且您的代码应该可以使用。
答案 1 :(得分:0)
如果n为2,则访问[2](a [i] = results;),但只有元素0和1
答案 2 :(得分:0)
你已经启动了大小为&#34; n&#34;的数组,你正在尝试访问[n]元素,数组索引从0开始到n-1。所以当你访问[n]时你会得到Arrayindexboundexception。 从
更改此行 int[] a = new int[n];
至int[] a = new int[n+1];
(第3行)
作品!!