4

我读过

    for (int i1 : A) {
    }

好于

    for (int i1=0; i1 < A.length; i++) {
    }

但是如果我想在第一个中访问索引值,是否有任何意思,或者我应该只使用第二个。

4

7 回答 7

3

维基百科指出:

foreach 循环通常不维护明确的计数器:它们本质上说“对这个集合中的所有内容执行此操作”,而不是“执行此操作 x 次”。这避免了潜在的错误,并使代码更易于阅读。

如果要使用索引,最好使用后一个版本。

如果我想在第一个中访问索引值有什么意思吗

是的你可以

int index = 0;
for (int i1 : A) 
{
    // Your logic
    // index++;
}

但同样,不推荐。如果您需要增强 for 循环中的索引,请重新考虑您的逻辑。

Java 推荐使用增强的 for 循环:Source(参见页面最后一行)

于 2012-10-30T05:47:30.773 回答
0

不,没有。你只需要声明一个变量。在这种情况下,最好只使用传统的。

于 2012-10-30T05:41:49.233 回答
0

使用此选项或最好使用第二个选项

  int count = 0;
 for (int i1 : A) {
    print count;
    count ++;
    }
于 2012-10-30T05:43:26.973 回答
0

没办法如上所述,看看这个类似的问题有没有办法在Java的for-each循环中访问迭代计数器?

于 2012-10-30T05:44:45.117 回答
0

你必须使用第二个。您的另一个选择是使用集合列表作为
List list = Arrays.asList(int a[]); list.get(int index);

于 2012-10-30T05:45:41.483 回答
0

您的第一个代码说,遍历集合 A 中的所有项目/对象,但最后一个代码说要遍历索引from 0 to n, n=>size of A

在正常情况下,两者都可以工作,选择什么通常取决于您可以使用哪个 API for 循环。

在您的第一个代码中,适用于 HashMap 或不填充数组。假设你有这个数据结构

A = [1,2,3,NULL,NULL,4,NULL,5]

在您的第一种情况下,可以只遍历现有值。但在最后一种情况下,您必须遍历所有元素。

此外,像 Maps 这样的无序或明确定义的数据结构可以有一种方法来保证您遍历所有元素,但不是按照明确定义的顺序。

于 2012-10-30T05:47:04.487 回答
0

不,你不能。for-each 被认为更好(引用您的问题),因为它没有 count 变量。这意味着从程序员的角度来看,出错的地方更少。检索数据不取决于程序员。Java 使用 for each 为您做到这一点。

每当我不需要计数器变量时,我倾向于使用 for-each。如果我需要计数,那么我必须使用旧样式的 for 循环。

于 2012-10-30T10:09:50.507 回答