Java - java.lang.ArrayIndexOutOfBoundsException在代码中出现?

时间:2015-08-05 05:21:37

标签: java

public static void main(String[] args) {

    BufferedReader br = null;

    try {

        String sCurrentLine;
        br = new BufferedReader(new FileReader("E:\\QuickStart.txt"));
        int index1=0;
        int index2=0;
        int strlen=0;
        boolean inBlock=true;
        boolean inComment=true;


        while ((sCurrentLine = br.readLine()) != null) {
            index1=sCurrentLine.indexOf("/");
            index2=sCurrentLine.indexOf("*");
            char[] c=sCurrentLine.toCharArray();

            for(int i=0;i<c.length;i++){
                if(c[i]=='"' && c[i+1]=='/'){
                    inBlock=true;
                }
                else if(c[i]=='/' && c[i+1]=='*'){
                    inComment=false;
                    continue;
                }
                else if(c[i]=='*' && c[i+1]=='/'){
                    inComment=true;
                    continue;
                }
                else if(c[i]=='/' && c[i+1]=='/'){
                    inComment=false;
                    continue;
                }
                if(inBlock && inComment){
                    System.out.print(c[i]);
                }
            }

        }

    }
    catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        try {
            if (br != null){
                    br.close();
                }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }

}

**逻辑上这个程序还没有完成,所以忽略逻辑。 当我运行此程序时,我收到ArrayIndexOutOfBoundsException错误,有人解释我为什么会收到此错误?

4 个答案:

答案 0 :(得分:1)

首先,ArrayIndexOutOfBoundsException不是编译异常。这是运行时异常。 在for循环中,您要检查变量i是否小于字符数组的大小。当您执行i+1时,在最后一个循环期间,i值将为length-1,并且您正在检查数组大小的索引。我希望我有道理。

答案 1 :(得分:0)

你一直运行到i<c.length这很好,只是你正在检查c[i+1],最终(在最后一次迭代中)将是:c[c.length] =&gt; ArrayIndexOutOfBoundsException异常

答案 2 :(得分:0)

for(int i=0;i<c.length;i++){
     if(c[i]=='"' && c[i+1]=='/'){
      inBlock=true;
}

以下是发生错误的地方c[i+1]

假设c.length = 5且i = 4,那么c [i + 1]就会发生变化c [5]没有被编入索引,说明错误发生的原因

解决方案:

for(int i=0;i<c.length-1;i++){
      if(c[i]=='"' && c[i+1]=='/'){
         inBlock=true;
    }

int len = c.length-1;
for(int i=0;i<len;i++){
   if(c[i]=='"' && c[i+1]=='/'){
        inBlock=true;
}

答案 3 :(得分:0)

  

ArrayIndexOutOfBoundsException - 抛出此异常表示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。

在您的代码中,我们从i = 0迭代到i < c.length。但是,我们尝试访问c[i + 1] c[c.length + 1],这意味着 ArrayIndexOutOfBoundsException

解决方案是将for循环条件更改为i < c.length - 1