【问题标题】:ArrayIndexOutOfBoundsException inside for loopfor循环内的ArrayIndexOutOfBoundsException
【发布时间】:2015-12-19 21:37:06
【问题描述】:

这里我取一个超过九位数的数字,将数字分成九位数的组并将其存储在一个数组中。 当我运行此代码将值存储在 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的初始化
  • 我认为arraySize 应该是numSize / 9,而不是numSize % 9
  • 与其以else 子句开始您的示例,不如发布一个简短但完整 程序来演示问题 - 包括哪一行出现故障。
  • 在这里,我将编辑我的帖子并在卡住的行中发表评论

标签: java for-loop indexoutofboundsexception


【解决方案1】:

问题是您分配给您初始化为只有一个元素的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;
    }
}

【讨论】:

  • 什么是干净的方法?
猜你喜欢
  • 1970-01-01
  • 2018-07-19
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
相关资源
最近更新 更多