需要帮助解决Java中的ArrayIndexOutOfBounds异常

时间:2018-04-21 07:59:59

标签: java arrays exception error-handling

我正在尝试运行一个调用我的类方法的方法。每次我调用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];

}

感谢您的帮助。

3 个答案:

答案 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行)

作品!!