问题描述
我正在尝试将 int 数组转换为 arraylist 并打印它,我可以使用 for 循环打印它,但我需要使用增强的 for 循环,以便更好地理解。
公共类测试{
public static void main(String[] args) {
int[] a = {1,2,3,4,5,6};
ArrayList<Integer> l = new ArrayList<Integer>();
for(int i=0;i<a.length;i++) {
l.add(a[i]);
//System.out.println(l.get(i));
}
for(int i : l) {
System.out.println(i);
l.get(i);
}
}
}
输出:
1
2
3
4
5
6
Exception in thread "main" java.lang.indexoutofboundsexception: Index: 6,Size: 6 at java.util.ArrayList.rangeCheck(ArrayList.java:657) at java.util.ArrayList.get(ArrayList.java:433) at Test.main(Test.java:18)
为什么这里的索引不是从 0 开始。
解决方法
For 循环 是合适的循环,当您确切地知道循环内的语句需要迭代多少次时。 For 循环反复迭代一个语句或一个语句块,直到指定的表达式求值为 false。 在 for 循环的变量的情况下总是只有 int 。
For-each 循环 用于遍历对象集合、列表泛型集合或数组列表集合中的项目。 Foreach的情况下,循环的变量与数组下的值的类型相同。
对于每个循环不跟踪索引。所以我们无法使用 For-Each 循环获取数组索引
在每个循环的代码中,您可以通过索引获取对象,例如l.get(i);
l 是 Arraylist 类型,它存储从 0 索引开始的值。此外,您的 ArrayList 包含一个整数值。当您到达第 6 个对象时,您正在访问 l.get(6),此时 IndexOutOfBoundsException 抛出。
因此,从您的程序中删除 l.get(i);。