为什么我必须使用for循环而不是foreach循环?

时间:2014-11-29 23:10:13

标签: java arrays loops

我希望我也可以提出问题,而不是真正有错误,需要修复它们。

我收到了以下代码:

public boolean equals(NaturalNumberTuple givenTuple) {
    int count = 0;
    if(tuple.length == givenTuple.getLength()){
        for(int i = 0; i < tuple.length; i++){
            if(this.tuple[i] == givenTuple.tuple[i]){
                count++;
            }
        }
        if(count == tuple.length){
            return true;
        } 
    }
    return false;
}

因为你可以看到我使用普通的for循环,但我知道我可以使用一个所谓的foreach循环

for(int i : tuple){...}

但如果我尝试使用它,我会收到错误&#34; ArrayIndexOutOfBoundsException&#34;如果我尝试检查两个Arrays是否相等。

有人可以解释一下为什么我不能在这里使用foreach循环吗?

1 个答案:

答案 0 :(得分:3)

我唯一的赌注就是你写道:

for(int i : tuple){
    if(this.tuple[i] == givenTuple.tuple[i]){
        count++;
    }
}

在for-each循环中,i获取数组中元素的值。这不是指数。假设你有:

int[] arr = {1, 4, -2};

i将取值1,4和-2,而不是0,1,2。

当您需要索引来访问givenTuple.tuple[i]时,我认为您可以坚持使用传统循环,或使用Arrays.equals(这将是一个单行)。

哦还要注意public boolean equals(NaturalNumberTuple givenTuple)不是equals方法的覆盖(可以给你带来意想不到的惊喜)