声明迭代器

时间:2014-06-29 17:10:59

标签: java iterator iteration

我在创建的迭代器上遇到了语法问题。我会使用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();
  • 手:我正在迭代的变量类:4手的列表
  • 玩家:构造Hands列表并包含迭代器实现的类
  • PlayerIterator:Players类中实现迭代器的类

这有意义吗?我对迭代器的掌握非常松散,所以如果我没有提供足够的信息,我可以轻松地创建更多信息。

2 个答案:

答案 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();
    }

    //...
}