-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( 2回目の反復で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 は、インデックスが 0 から始まるサイズ 1 の配列が作成されることを意味します。

(つまり:) A[0] であり、for ループを 2 回実行するためfor (int i = 0; i <= n; i++)、2 回目にループを実行すると、インデックス 1 の配列を見つけようとします (つまり:) A[1] は存在しないため、JVMスローされます例外。

for loop から等号を削除すると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

int i = 0; i <= n; i++) ここでも i=n にアクセスしているため、arrayindexoutofbounds 例外が発生します!

于 2013-02-22T05:30:18.060 に答える
0

最初の問題 for ループ:

double[] A = new double[n];

n 個の要素を持つ配列を作成しました。配列の最初のインデックスは です0。が 5 に等しいと想像してみましょう。nしたがって、配列内のインデックスは のようになります[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

double[] A = 新しい double[n+1];

これはあなたの問題を解決します

于 2013-02-22T06:42:35.920 に答える