-3

我收到运行时错误:

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));
}
}
4

7 回答 7

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错误的访问。

于 2013-02-22T05:27:35.293 回答
1

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

于 2013-02-22T05:28:12.717 回答
1

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

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

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

于 2013-02-22T05:46:05.247 回答
0

你需要改变

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

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

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

于 2013-02-22T05:29:35.213 回答
0

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

于 2013-02-22T05:30:18.060 回答
0

第一个for循环的问题:

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 == 56thzero index

于 2013-02-22T05:32:20.563 回答
0

双[] A = 新双[n+1];

这将解决您的问题

于 2013-02-22T06:42:35.920 回答