这是我第一次看到这种语法:
// 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
}
循环是什么?某种Matlab语法?
还有其他方法可以为循环编写吗?
此致
答案 0 :(得分:8)
这是 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-each
<强> (Documentation) 强>
答案 1 :(得分:4)
每个循环都是一个。你也可以这样写:
for(int i = 0; i < successors.size(); i++) {
Node son = successors.get(i);
}
虽然我个人这样做的唯一时间是除了访问元素之外还需要做索引。
答案 2 :(得分:4)
这是增强的声明。请参阅Java语言规范的14.14.2. The enhanced for statement 部分。
答案 3 :(得分:3)
它被称为Enhanced for-loop
。它基本上通过按顺序获取每个元素来迭代Collection。所以你不需要访问索引上的元素。
List<Integer> list = new ArrayList<Integer>();
for (int val: list) {
System.out.println(val); // Prints each value from list
}
请参阅Java语言规范的§14.14.2 - Enhanced for loop部分。
答案 4 :(得分:2)
对son
中successors
的每个son
来说,Node
的类型为{{1}}“
答案 5 :(得分: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
}
答案 6 :(得分:1)
它被称为增强型for循环,而不是使用迭代器迭代一个集合,你可以简单地使用它来循环
使用迭代器
Iterator<String> i=a.iterator();
while(i.hasNext())
{
String s=i.next();
}
你可以简单地使用增强的for循环。
for(String s : a)
{
.. do something
}
所以它只是Java 5中引入的一个语法糖,它执行迭代器的相同功能,并在内部使用迭代器。 该类应该实现Iterator接口,以便将其用于循环
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
}
}
答案 7 :(得分:-1)
在这种情况下,它是一个 for each 循环,它是这样写的