4

这是我第一次看到这种语法:

// class Node
public class Node { 

...
...

}

public class Otherclass { ... }

Otherclass graph = new Otherclass();

// getSuccessors is a method of Otherclass class 

Node currentNode ;

List<Node> successors = graph.getSuccessors(currentNode);

// weird for loop 

for (Node son : successors) { 

// do something 

}

那是什么for循环?某种 Matlab 语法?

有没有其他方法可以编写 for 循环?

问候

4

8 回答 8

9

那是一个for-each循环(也称为enhanced-for.)

for (type var : arr) { //could be used to iterate over array/Collections class
    body-of-loop
}

Java 5 中扩展了基本的 for 循环,以使对数组和其他集合的迭代更加方便。这种较新的 for 语句称为增强的 for 或 for-each

(文档)

于 2012-11-22T15:42:44.173 回答
6

这是一个 for each 循环。你也可以这样写:

for(int i = 0; i < successors.size(); i++) {
    Node son = successors.get(i);
}

尽管我个人唯一一次这样做是在需要索引来执行除访问元素之外的其他操作时。

于 2012-11-22T15:43:23.860 回答
4

它是增强的 for 语句。请参阅第14.14.2 节。Java 语言规范的增强 for 语句

于 2012-11-22T15:44:20.660 回答
3

它被称为Enhanced for-loop。它基本上通过按顺序获取每个元素来迭代集合。所以你不需要访问索引上的元素。

List<Integer> list = new ArrayList<Integer>();

for (int val: list) {
    System.out.println(val);  // Prints each value from list
}

请参阅§14.14.2 - Java 语言规范的增强 for 循环部分。

于 2012-11-22T15:42:56.773 回答
2

这是您的 for 循环的一种表示形式

for(int i=0;i<successors.size();i++){

        Node myNode = successors.get(i);
    }

这不是 for 循环,但您仍然可以这样做。

Iterator<Node> itr = successors.iterator();

    while(itr.hasNext()){
        Node myNode = itr.next();
        // your logic
    }
于 2012-11-22T15:46:03.873 回答
2

它的意思是“对于每个sonin successors,其中的类型sonNode

于 2012-11-22T15:43:09.520 回答
1

它被称为增强的 for 循环,而不是使用迭代器来迭代一个集合,你可以简单地使用这个 for 循环

使用迭代器

Iterator<String> i=a.iterator();

while(i.hasNext())
{
String s=i.next();
}

您可以简单地使用增强的 for 循环。

for(String s : a)
{
 .. do something
}

所以它只是 Java 5 中引入的一种语法糖,它执行与迭代器相同的功能,并且它在内部使用迭代器。该类应实现 Iterator 接口才能使用此 for 循环

class Node<T> implements Iterator<String>{

@Override
public boolean hasNext() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public String next() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void remove() {
    // TODO Auto-generated method stub

}



}
于 2012-11-22T15:49:56.493 回答
-1

在这种情况下,它是一个 for each 循环,它是这样写的

于 2021-03-09T15:05:17.727 回答