2014-06-29 48 views
-1

我在創建的迭代器上遇到了語法問題。我會使用for-each循環,除了我需要編輯我將從該循環中取出的元素。我創建了一個名爲玩家的類,它在紙牌遊戲中創建一個4手名單(手是另一個代表單個玩家的類)。我正在嘗試爲這個類創建一個迭代器,這給我帶來了麻煩。我的實現如下:聲明迭代器

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手
  • 球員名單:即構建的列表中的類雙手包含迭代器實現
  • PlayerIterator:實現迭代
的玩家類中的類

這有道理嗎?我對迭代器有一個非常寬泛的把握,所以如果我沒有提供足夠的信息,我可以輕鬆創建更多。

+2

「現在這是給我的錯誤」 - >有什麼錯誤?我們無法讀懂你的想法。 – awksp

+0

這不是對'Iterator'的鬆散掌握,它是Java中嵌套類的鬆散掌握。閱讀[教程](http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)。 –

+0

@ user3580294對不起,它說「玩家」類的方法「PlayerIterator」未定義。它認爲我真的在試圖聲明迭代器時調用方法 –

回答

0

從您發佈的代碼中難以分辨出來,但我認爲您可能會錯過new關鍵字。我假設你有類似以下的球員類的以外:

Players players = new Players(); 

當玩家類的實例有手的一些集合作爲其領域之一。在這種情況下,你想做的事是這樣的:

Iterator<Hand> iterator = players.new PlayerIterator(); 

但是,它也像你可能打算PlayerIterator是一個靜態類,這將需要如果球員類有一個靜態集合手:

private static List<Hand> players = new ArrayList<Hand>(); 

那麼你一定要做到這一點:

Iterator<Hand> iterator = new Players.PlayerIterator(); 

如果你能發佈更多的代碼,這將是更容易引導您找到正確的解決方案。另一個選項可能是讓Players實現Iterable<Hand>,這意味着您可以直接在for-each循環中遍歷Player實例。

0

當您的班級中已有Hand s列表時,我沒有看到創建Hand迭代器的要點。這是很難理解你的代碼試圖做的,但如果我正確地理解您的方案,以下就足夠了:

public class Players implements Iterable<Hand> { 
    List<Hand> hands = ... 

    //... 

    @Override 
    public Iterator<Hand> iterator() { 
     return hands.iterator(); 
    } 

    //... 
}