我一直在线程“main”java.lang.ArrayIndexOutOfBoundsException错误中获得异常

时间:2013-02-22 05:25:16

标签: java

我收到运行时错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Series.series(Series.java:10)
at Series.main(Series.java:21)

在第10行和第21行,无法弄清楚错误是什么。我试图使程序总和系列1 - 2x + 3x ^ 2 + 4x ^ 3 ... n * x ^(n-1)。我能得到的任何帮助都将不胜感激!

public class Series {

public static double series (double x, int n) {

    int increase = n;
    double sign = Math.pow(-1.0, increase+1);
    double exponent = Math.pow(x, increase-1);
    double[] A = new double[n];
    for (int i = 0; i <= n; i++) {
        A[i] = (sign) * ((increase + 1) - A.length) * (exponent); increase = increase + 1;
    }
    double sum = 0;
    for (int i = 0; i < A.length; i++) {
            sum = sum + A[i];
        }
    return sum;
}

public static void main (String[] args) {
    System.out.print("series(0.5, 1)  should be  1.0");
    System.out.println(" : " + series(0.5, 1));
}
}

7 个答案:

答案 0 :(得分:2)

这就是问题所在: -

double[] A = new double[n];

n=1,表示您只能访问A[0]

但是你的for循环: -

for (int i = 0; i <= n; i++) - 这会迭代到i<=n i变为1 进行第二次迭代),这意味着它会主动尝试访问A[1],这会引发java.lang.ArrayIndexOutOfBoundsException 1}}错误。

答案 1 :(得分:1)

数组的最后一个索引是(n-1)。当i == n时,抛出异常。

答案 2 :(得分:1)

数组索引从零开始。在代码double[] A = new double[n]中,其中n = 1意味着将创建一个大小为1的数组,其索引从零开始。

(即:) A [0]并且因为你运行循环两次for (int i = 0; i <= n; i++),第二次循环运行时,它会尝试找到索引为1的数组(即:) A [1]不存在,因此JVM会抛出异常。

从for循环for (int i = 0; i < n; i++)中删除等号,您的代码可以正常工作。

答案 3 :(得分:0)

您需要更改

for (int i = 0; i <= n; i++)

for (int i = 0; i < n; i++)

因为当你处于1 = 1时,代码会尝试为[1]赋值。由于数组大小本身为1,因此该元素不存在。因此该数组仅包含{a [0]}。

答案 4 :(得分:0)

int i = 0;我&lt; = n;我++) 在这里,您还访问了i = n,它给出了arrayindexoutofbounds异常!

答案 5 :(得分:0)

循环的第一个问题:

double[] A = new double[n];

您已创建包含n个元素的数组。数组中的第一个索引是0。让我们假设n等于5,因此数组中的索引看起来像[0],[1],[2],[3],[4]

for (int i = 0; i <= n; i++) {
        A[i] = (sign) * ((increase + 1) - A.length) * (exponent); increase = increase + 1;
    }

在此循环中,您的条件为<=,因此当您n == 5时,您将尝试插入额外的6th元素,因为您已在zero index中插入了元素

答案 6 :(得分:0)

double [] A = new double [n + 1];

这将解决您的问题