我收到运行时错误:
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));
}
}
答案 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];
这将解决您的问题