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
错误,有人解释我为什么会收到此错误?
答案 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