写了个程序,很奇怪,
有一个数组,时常会抛出越界的异常,
这个数组是处于循环中的,也就是说,数组的大小和内容值每一次循环时都是处于变化中的,
运行程序的时候,当循环次数很多的时候,到后来会抛出异常,但每一次抛出异常的时机也很随机,比如说循环100次的话,有时候是在98,99次抛异常,有时又可能在96,97次抛异常,但如果循环次数不是那么多的话,就没有问题。
不知道这样的情况是什么原因?是数组没有初始化好么?顺便再问一下动态初始化数组大小的方法是什么?我用的是int a[] = new a[len];

解决方案 »

  1.   

    俺也是来学习滴,一起努力up^up
      

  2.   

    比如说其中一次是定义了数组长度为97,但是你要循环100次赋值的话,肯定会在循环到97时候,抛出数组越界的异常,因为数组只是从a[0]-a[96],这样你循环给a[97]赋值就越界了
      

  3.   

    汗,从代码里应该看不出什么吧 public void initVector(){//生成输入向量
    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)
      

  4.   

    WeiLen怎么算出来的?
    for(i = 1; i  <= dataNumber; i++){ 
        for(j = Start; j  <= End; j++){ 
            Vector[Count++] = Record[i]*Vector[j];  //异常抛出处 但不是每次都抛出异常的  
         } 
        Start += getInterval(k, i); 

    你循环了dataNumber的平方次……
      

  5.   

    真对不起大家,是我求WeiLen的时候有错误。。