如何在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不适用于表达类型
答案 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);
}