使用冒号的for循环

时间:2013-07-27 09:19:44

标签: java for-loop

我正在研究代码,我不明白for循环实际上在做什么。

for (final Move move : this.getPossibleMoves(color)) { 
      // do something..
}

班级移动:

public class Move {
private final int source;
private final int target;

public Move() {
    source = 0;
    target = 0;
}

getPossibleMoves方法:

public Move[] getPossibleMoves(final PieceColor color) {
    // do something
    return simpleMoves.toArray(new Move[0]);
}

3 个答案:

答案 0 :(得分:2)

请参阅the official docs on the For-Each Loop了解相关信息。

你可以这样思考:

for (Iterator<Move> itr = this.getPossibleMoves(color).iterator(); itr.hasNext();)
{
   final Move mv = itr.next();
   ...
} 

答案 1 :(得分:1)

for 语句具有以下形式:

form(Type element: iterable) { ... }

其中element是数组,列表,集合或Iterable类型对象中包含的任何对象集合的元素。

在您的情况下getPossibleMoves()返回Move类型的对象数组。这是您更清晰的代码,以便您更好地理解它的作用:

Move[] moves = this.getPossibleMoves(color);


for (final Move move : moves) { 

    // do something....

}

答案 2 :(得分:0)

这是enhanced for loop,在 5.0版中的 Java SE平台中引入,它是一种迭代数组元素的简单方法或者Collection。当您希望以倒数第一顺序逐步遍历数组的每个元素时,可以使用它们,并且您不需要知道当前元素的索引。

假设this.getPossibleMoves(color)返回Move[]数组。此代码:

for (final Move move : this.getPossibleMoves(color)) { 
   // do something....
}

隐含地等同于:

for (int index=0;index<this.getPossibleMoves(color).length;index++) { 
    final Move move = this.getPossibleMoves(color)[index];
   // do something....
}

建议阅读:

  1. The For-Each Loop
  2. Using Enhanced For-Loops
  3. Enhanced for each loop iteration control