for 循环中的 ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException inside for loop

这里我取一个超过九位数字的数字,将该数字分成九位数字组并将其存储在一个数组中。 当我 运行 此代码将值存储在 arrayOfNumbers 中时,抛出 ArrayIndexOutOfBoundsException。

 public BigNum(String s) {
    if (badNum(s)) {
        throw new IllegalArgumentException();     //Exception to check for invalid input
    }

    int arraySize = 1;
    num = s;
    int [] arrayOfNumbers = new int[arraySize];
    int numSize = s.length();

    if (numSize <= 9)
    {
        arraySize = 1;
        arrayOfNumbers[0] = Integer.parseInt(s);         //THIS CLAUSE IS WORKING
    }
    else if((numSize % 9) >= 1) {
        arraySize = ((numSize % 9) + 1);
        int x = 0;
        int y = 9;
        int[] evenString = new int[arraySize];                  
        for (int i=0; i < arraySize; i++){


            String w = s.substring(x,y);

            arrayOfNumbers[i] = Integer.parseInt(w); //THIS LINE IS FAILING *********

            if(i == arraySize - 2){
                x = x + 9;
                y = y + (numSize % 9);
            }
            else{
                y = y + 9;
                x = x + 9;
            }


        }

        System.out.println(arraySize);
    }
    else if((numSize % 9 == 0)) {
        arraySize = (numSize/9);

        int x = 0;
        int y = 9;

        for (int i=0; i < arraySize; i++){

            String w = s.substring(x,y);
            int[] evenString = new int[arraySize];      //THIS CLAUSE IS WORKING

            y = y*2;
            x = x+9;

        }
    }
}

问题是您正在分配给初始化为只有一个元素的 arrayOfNumbers。您的意思是改为分配给 evenString 吗? evenString 使用此循环的正确数组大小进行初始化。

您也可以只将 arrayOfNumbers 声明为与 evenString 数组大小相同。例如:

int[] arrayOfNumbers = new int[arraySize];                  
for (int i=0; i < arraySize; i++){


    String w = s.substring(x,y);

    arrayOfNumbers[i] = Integer.parseInt(w); //THIS LINE IS FAILING *********

    if(i == arraySize - 2){
        x = x + 9;
        y = y + (numSize % 9);
    }
    else{
        y = y + 9;
        x = x + 9;
    }
}