先上代码:
import java.util.ArrayList;
public class practice {
public void printAl(ArrayList al){
int i=0;
while(!al.isEmpty()){
System.out.println(""+al.get(i));
al.remove(i++); -------------------------------Here
}
System.out.println();
}
public static void main(String[] args) {
ArrayList al=new ArrayList();
for(int i=0;i<args.length;i++){
al.add(args[i]);
}
new practice().printAl(al);
}
}
在这段代码中,使用arraylist读入命令行ARGS的所有字符串,然后再在方法PRINTAL中挨个打印字符串,每次打印过后随机删除字符串.
运行出错:
产生异常 INDEXOUTOFBOUNDSEXCEPTION,数组越界异常,检查代码百思不得其解,最后阅读JDK中ARRAYLIST的源代码发现错误;
因为remove方法是将INDEX所在位置的元素移除,并且在返回值中返回,最后将INDEX右边的元素挨个左移,进行填充。所以在HERE标注的代码行出现了错误,不应该使计数器I的值增加,因为REMOVE掉ARGS[0]后,所有元素自动向左移动一位
代码应改为:
import java.util.ArrayList;
public class practice {
public void printAl(ArrayList al){
int i=0;
while(!al.isEmpty()){
System.out.println(""+al.get(i));
al.remove(i);
}
System.out.println();
}
public static void main(String[] args) {
ArrayList al=new ArrayList();
for(int i=0;i<args.length;i++){
al.add(args[i]);
}
new practice().printAl(al);
}
}