索引是否从 1 开始以增强 for 循环

问题描述

我正在尝试将 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);