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

标签 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){...}

但是如果我尝试使用它,如果我尝试检查两个数组是否相等,则会收到错误“ArrayIndexOutOfBoundsException”。

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

最佳答案

我唯一的赌注是你写道:

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],我认为您可以坚持使用传统的for循环,或者使用Arrays.equals(这将成为一句单行话)。

哦,还要注意 public boolean equals(NaturalNumberTuple GiveTuple) 并不是 equals 方法的重写(这可能会给您带来意想不到的惊喜)

关于java - 为什么我必须使用 for 循环而不是 foreach 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208159/

相关文章:

java - 创建新的子类对象时是否存在父类(super class)实例?

arrays - 给定列车时刻表所需的最少站台数量

java - 我无法将 String 放在字符串数组的第一个位置

java - for 循环内的 for 循环

php - 从 print_r() 的输出中删除字符串 "Array"

javascript - 循环中几个元素的 JS ArrowDown addEventListener(演示)

java - Android - 带有 Google Analytics 和 Firebase Analytics 的 Google 标签管理器

java - 在抽象类和子方法之间使用Spring事务代理

java - 使用父类(super class)/继承/构造函数问题

java - ArrayList<Boolean> 类型中的方法 toArray(T[]) 不适用于参数 (boolean[])