线程" main"中的例外情况注释中的java.lang.ArrayIndexOutOfBoundsException:1(Comment.java:13)

时间:2017-03-04 07:54:08

标签: java

我已经编写了一个程序来识别给定的行是否是注释。程序运行正常但是当用户输入单斜杠(/)时,他会收到一条消息,说明"线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:1     在Comment.main(Comment.java:13)"而不是评论。 帮帮我,我想发现这个问题。

import java.util.Scanner;

public class Comment {
    public static void main(String[] args) {
        char com[]=new char[30];
        int i=2,a=0;
        System.out.println("Hello World!");
        System.out.println("\n\n\n Enter comment: \n"); 
        Scanner reader = new Scanner(System.in);
        com = reader.next().toCharArray();
        if(com[0]=='/'){
            if(com[1]=='/')         
                System.out.println("\n It is a comment");
            else if(com[1]=='*'){
                for(i=2;i<=30;i++){
                    if(com[i]=='*'&&com[i+1]=='/'){
                        System.out.println("\n It is a comment");
                        a=1; break;
                    }
                    else 
                        continue;
                }
                if(a==0) 
                    System.out.println("\n It is not a comment"); 
            }   
            else 
                System.out.println("\n It is not a comment"); 
        }
        else 
            System.out.println("\n It is not a comment");
    }
}

3 个答案:

答案 0 :(得分:2)

  

“线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:1在Comment.main(Comment.java:13)”

这意味着:

if(com[0]=='/'){
    if(com[1]=='/')         
        System.out.println("\n It is a comment");
    // your code
}

如果用户只输入斜杠(/),则输入(com)的长度为1(仅限一个字符)。您只能通过com[0]访问索引0。

因此,您不会在索引1到com[1]获得任何值。如果您尝试访问com[1],则会获得ArrayIndexOutOfBoundsException

要了解错误,您可以打印com数组的长度。

com = reader.next().toCharArray();
System.out.println(com.length); // prints 1 if input is '/'

当用户仅输入斜杠(/)时,即使初始化com数组,长度也为1。

如果您希望程序检查用户输入是否为注释,则需要更新代码。要避免此类索引超出绑定异常,您应该在if / else块之前检查com数组的长度。

答案 1 :(得分:0)

你只能输入一个字符 让我说清楚:

`com[0] // the enter value will be in it `
`com[1] // there is no value here , `
//you can do the answer for it by putting in it inside of a loop 

loop(int i=0;i<30;i++){

`enter code here`/ 
`check the number `/ 
 /if true break `enter code here`
 no need for else he will just go back to the start of the loop 
}

答案 2 :(得分:0)

希望这会清除你的怀疑 -

com = reader.next()。toCharArray(); 这行代码将创建一个新的char数组并使&#34; com&#34;引用该数组,这意味着现在 com.length; 将给出用户输入的字符数不是30。

因此,如果用户输入&#34; /&#34;,则com.length;将是一个,并且在循环中访问com [1]将导致 java.lang.ArrayIndexOutOfBoundsException

不仅&#34; /&#34;但是所有以下内容也会给出相同的例外 -

  1. / *有些文字......
  2. / *一些文字...... /
  3. / 一些文字...... 以及除某些文字以外的更多内容...... /
  4. 所有因为同样的原因。

    所以你需要检查 com.legth; 并使用com.length; in for循环而不是30.它还可以避免不必要的迭代。