参考Java foreach中的迭代次数

时间:2009-10-08 20:30:18

标签: java arrays foreach

如何在foreach中引用数组的索引?

我的代码

String[] name = { "hello", "world" };
for ( int k : name[k] ) {
   --- cut ---
}

我期待foreach -loop

1. set k = 0 in first iteration so that name[0] works correctly
2. set k = 1 in the next iteration...

我收到错误消息

  

foreach不适用于表达类型

7 个答案:

答案 0 :(得分:16)

这是因为使用foreach语法时索引不可用。如果需要索引,则必须使用传统迭代:

for (int i =0; i < names.length; i++) {
   String name = names[i];
}

如果您不需要索引,标准foreach就足够了:

for (String name : names) {
    //...
} 

编辑显然你可以使用计数器获取索引,但是你有一个在循环范围之外可用的变量,我认为这是不可取的

答案 1 :(得分:3)

唯一的办法就是用计数器跟踪自己。

int cnt = 0;
String[] names = new String[10];
for (String s : names) {
   ...do something...
   cnt++;
}

答案 2 :(得分:2)

使用您的示例,foreach循环应该像这样使用(复数names是名称数组比name更好的名称):

String[] names = { "hello", "world" };
for ( String name : names ) {
   // do something with the name
}

答案 3 :(得分:1)

不,你不能这样做。在增强的for语句中,您只能迭代Iterable。你不能在里面做任何其他事情。

答案 4 :(得分:1)

你不需要柜台。只是做

String[] name = { "hello", "world" };
for ( String s : name ) {
   --- cut ---
   System.out.println(s);
   --- cut ---
}

将输出

hello
world

答案 5 :(得分:0)

您错误地使用for each循环。它会自动为您提供迭代内容中每个元素的引用,并且需要进行索引。在这种情况下,正确的方法如下:

String[] name = {"hello", "world"};
for(String s : name){
    System.out.println(s);
}

如果在访问可迭代对象的元素时需要更大的灵活性,可以直接使用迭代器。数组不提供迭代器,所以我在这里使用List。

List<String> name = Arrays.asList(new String[]{"hello", "world"});

for(Iterator<String> it = name.iterator(); it.hasNext();){
    String currentName = it.next();
    System.out.println(currentName);
    it.remove();
}

答案 6 :(得分:0)

    Integer index = null;
    String[] tokens = new String[] { "I", "Love", "You" };
    List<String> arrs = Arrays.asList(tokens);
    for (String arr : arrs) {
        index = arrs.indexOf(arr);
        System.out.println("Index of " + arr + " is: " + index);
    }