写了个程序,很奇怪,
有一个数组,时常会抛出越界的异常,
这个数组是处于循环中的,也就是说,数组的大小和内容值每一次循环时都是处于变化中的,
运行程序的时候,当循环次数很多的时候,到后来会抛出异常,但每一次抛出异常的时机也很随机,比如说循环100次的话,有时候是在98,99次抛异常,有时又可能在96,97次抛异常,但如果循环次数不是那么多的话,就没有问题。
不知道这样的情况是什么原因?是数组没有初始化好么?顺便再问一下动态初始化数组大小的方法是什么?我用的是int a[] = new a[len];
有一个数组,时常会抛出越界的异常,
这个数组是处于循环中的,也就是说,数组的大小和内容值每一次循环时都是处于变化中的,
运行程序的时候,当循环次数很多的时候,到后来会抛出异常,但每一次抛出异常的时机也很随机,比如说循环100次的话,有时候是在98,99次抛异常,有时又可能在96,97次抛异常,但如果循环次数不是那么多的话,就没有问题。
不知道这样的情况是什么原因?是数组没有初始化好么?顺便再问一下动态初始化数组大小的方法是什么?我用的是int a[] = new a[len];
int dataNumber = colNumber - 1;
int Start = 1;
int End = dataNumber;
int Count = 0;
int i,j;
Vector = new float[WeiLen+1];//这个WeiLen是每次不一样的,有20,有50,有105,每次抛出异常都是说106的索引越界,但并不是每次数组为105的时候都会抛出异常
Vector[Count++] = 0;
for (int k = 1; k <= Degree; k++){
if (k == 1) {
for(int m = 1; m <= dataNumber; m++)
Vector[Count++] = Record[m];
} else {
for(i = 1; i <= dataNumber; i++){
for(j = Start; j <= End; j++){
Vector[Count++] = Record[i]*Vector[j]; //异常抛出处 但不是每次都抛出异常的
}
Start += getInterval(k, i);
}
Start = getWeiLen(k-1)+1;
End = getWeiLen(k);
}
}
System.out.print(Count+",");
}异常是这样的,全部都是106越界,
java.lang.ArrayIndexOutOfBoundsException: 106
at aa.S515.initVector(S515.java:172)
at aa.S515.trainORforecast(S515.java:250)
at aa.S515.trainModel(S515.java:221)
at aa.S515.main(S515.java:283)
for(i = 1; i <= dataNumber; i++){
for(j = Start; j <= End; j++){
Vector[Count++] = Record[i]*Vector[j]; //异常抛出处 但不是每次都抛出异常的
}
Start += getInterval(k, i);
}
你循环了dataNumber的平方次……