Java 返回方法时ArrayExceptionAutofBounds
我试图创建一个fillArray方法,它用20个随机值填充和数组,并每三个值求和一次。我在第21行得到一个ArrayExceptionAutofBounds,这是调用该方法的时候。通过调试,我看到数组中填充了正确的值,并且正确计算了总和。我想知道错误是什么Java 返回方法时ArrayExceptionAutofBounds,java,arrays,debugging,error-handling,Java,Arrays,Debugging,Error Handling,我试图创建一个fillArray方法,它用20个随机值填充和数组,并每三个值求和一次。我在第21行得到一个ArrayExceptionAutofBounds,这是调用该方法的时候。通过调试,我看到数组中填充了正确的值,并且正确计算了总和。我想知道错误是什么 public static void fillArray(){ //adding up A[0], A[3], A[6}, ... double[] A = new double[20]; for(int i = 0
public static void fillArray(){
//adding up A[0], A[3], A[6}, ...
double[] A = new double[20];
for(int i = 0; i < A.length; i++)
A[i] = Math.random();
double sum = 0;
int k = 0;
do{
k += 3;
sum += A[k];
}while(k < 20);
System.out.println("sum = " + sum);
}
publicstaticvoidfillarray(){
//将[0],A[3],A[6}。。。
double[]A=新的double[20];
for(int i=0;i
我再次希望确定错误的原因,而不一定是修复错误的方法。这是您的问题:
do{
k += 3;
sum += A[k];
}while(k < 20);
do{
k+=3;
总和+=A[k];
}k<20;
K将等于0,然后是3,然后是6,等等,直到它达到21,然后您尝试访问一个超出边界的[21]
这是因为当while循环的第6次迭代中k=18时,
(k<20)
为true,因此while循环将继续,并向k添加另一个3,使其成为21。之后,while循环停止,因为k不再小于20,k的值为21。由于在大小为20的数组上命中21,因此会出现错误。要修复此问题,请执行以下操作:
do{
k += 3;
if(k <= 20){
sum += A[k];
}
}while(k < 20);
do{
k+=3;
如果(k计算总和的第二个循环是do/while循环,这意味着在执行循环体后,条件将始终得到检查。您以3步向上计数k
,这意味着在while(k<20)之前的某个点它将达到21
条件返回false,导致您的错误。我认为问题在于k正在递增并被用作数组索引,在使用当前逻辑的之前,k将是3,6,9,12,15,18和21。最后一个值负责越界异常。您的循环不会在18处停止,因为它小于20。您可以解决此问题通过将代码更改为以下内容来消除错误:
do{
k += 3;
sum += A[k];
}while(k < 18);
do{
k+=3;
总和+=A[k];
}k<18;
在使用数组索引之前先增加数组索引。因此,您不仅在上一步中超出了数组索引,而且也没有在0索引处添加元素。如果您在调试器中观察过它,那么您已经看到k变为21,并了解了原因。感谢大家的帮助,出于某种原因,我认为当k达到不会叫它的。我犯了个愚蠢的错误。谢谢
do{
k += 3;
sum += A[k];
}while(k < 18);