我已经编写了一个程序来识别给定的行是否是注释。程序运行正常但是当用户输入单斜杠(/)时,他会收到一条消息,说明"线程中的异常" 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");
}
}
答案 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;但是所有以下内容也会给出相同的例外 -
所有因为同样的原因。
所以你需要检查 com.legth; 并使用com.length; in for循环而不是30.它还可以避免不必要的迭代。