ArrayIndexOutOfBound 错误,当我使用增强的 for 循环 [duplicate]

ArrayIndexOutOfBound error when i used enhanced for loop [duplicate]

提问人:Prajakta Yadav 提问时间:11/25/2021 最后编辑:Prajakta Yadav 更新时间:11/25/2021 访问量:78

问:

我们是否可以在不出现 ArrayIndexOutOfBound 错误的情况下使用 enhanced for 循环。 因为在使用 normal for 循环后,它正在工作。

    public static void main(String[] args) {
        int a[] = {1,2,3,4};
        int b[] = {1,2,3,4};
 boolean status = true;
        if (a.length == b.length){
            for (int i:a){
                if (a[i] != b[i]){
                    status =false;
                }
            }
        }
        else {
            status = false;
        }

        if (status == true){
            System.out.println("arrays are equal...");
        }
        else {
            System.out.println("arrays not equal...");
        }
    }
}

Java 数组 foreach 等于 arrayIndexOutofboundsException

评论

1赞 Andy Turner 11/25/2021
你当然可以使用.Arrays.equals
0赞 Andy Turner 11/25/2021
什么是调试器,它如何帮助我诊断问题?
2赞 zysaaa 11/25/2021
您对 的用法有错误的理解。for (int i:a)

答:

1赞 jmizv 11/25/2021 #1

那是因为您正在访问数组的元素。a

循环

for (int i : a) {
  System.out.println(i);
}

将打印出以下值:1、2、3、4。

您可能期望得到 0、1、2、3,但这不是增强循环的工作方式。

起色

与其手动比较两个数组,不如使用方便的方法:Arrays.equals()

public static void main(String[] args) {
    int a[] = {1,2,3,4};
    int b[] = {1,2,3,4};
    boolean status = java.util.Arrays.equals(a, b);

    if (status){
        System.out.println("arrays are equal...");
    } else {
        System.out.println("arrays not equal...");
    }
}

评论

1赞 GhostCat 11/25/2021
我认为您也应该建议如何手动实际比较数组。处于学习阶段的人应该首先自己编写解决方案,然后你告诉他们:在现实世界中,使用这个库调用。
0赞 Prajakta Yadav 11/25/2021
if (a.length == b.length){ for (int i:a){ if (a[i-1] != b[i-1]){ status =false;
0赞 jmizv 11/25/2021
@Prajakta Yadav 中,这之所以有效,是因为您的数组具有以下值:1,2,3,4。尝试使用像 or 这样的数组,它将不再起作用。{1,2,3,5}{1,2,4}
1赞 Metin Bulak 11/25/2021 #2

for (int i:a) // 你在这里弄错了,i 等于 1,2,3,4 数组索引必须以 0 开头

 public static void main(String[] args) {
        int a[] = {1,2,3,4};
        int b[] = {1,2,3,4};
 boolean status = true;
        if (a.length == b.length){
            for (int i=0; i<a.length; i++){  // look at here 
                if (a[i] != b[i]){
                    status =false;
                }
            }
        }
        else {
            status = false;
        }

        if (status == true){
            System.out.println("arrays are equal...");
        }
        else {
            System.out.println("arrays not equal...");
        }
    }
}