我在创建的迭代器上遇到了语法问题。我会使用for-each循环,除了我需要编辑我将从该循环中拉出的元素。我创建了一个名为Players的类,它在纸牌游戏中创建了一个4手牌列表(Hand是另一个代表单个玩家的类)。我正在尝试为这个类创建一个迭代器,这给了我麻烦。我的实现如下:
public class Players
{ ....
public class PlayerIterator implements Iterator<Hand>
{
private final Iterator<Hand> iterator;
private PlayerIterator()
{
this.iterator = players.iterator();
}
....
}
}
据我所知,我的实现似乎是正确的,因为我没有在eclipse中收到任何错误。但是,我在实际程序中声明迭代器时遇到问题。我如何声明这样的迭代器?
现在这给了我一个错误:
Iterator<Hand> it = Players.PlayerIterator();
这有意义吗?我对迭代器的掌握非常松散,所以如果我没有提供足够的信息,我可以轻松地创建更多信息。
答案 0 :(得分:0)
从您发布的代码中判断一下有点困难,但我认为您可能只是错过了new
个关键字。我假设你在Players课程之外有以下内容:
Players players = new Players();
其中Players类的实例将Hands的一些集合作为其字段之一。在这种情况下,你想要做的是:
Iterator<Hand> iterator = players.new PlayerIterator();
但是,看起来您可能还希望PlayerIterator
成为一个静态类,如果Players类有一个 static Hands集合,则需要这样做:
private static List<Hand> players = new ArrayList<Hand>();
然后你想这样做:
Iterator<Hand> iterator = new Players.PlayerIterator();
如果您可以发布更多代码,那么引导您找到正确的解决方案会更容易。另一种选择可能是Players
实现Iterable<Hand>
,这意味着您可以在for-each循环中直接遍历Players实例。
答案 1 :(得分:0)
当你的班级中已有Hand
个列表时,我没有看到创建Hand
迭代器的重点。很难理解你的代码尝试做什么,但如果我理解你的场景正确,下面的内容就足够了:
public class Players implements Iterable<Hand> {
List<Hand> hands = ...
//...
@Override
public Iterator<Hand> iterator() {
return hands.iterator();
}
//...
}