2016-06-14 97 views
-1

我試圖重寫AssassinManager的構造函數(見下文)。 此方法是一個構造函數,它接受ArrayList作爲參數。 ArrayList應該按照出現的順序將名稱添加到對象中。每個新節點都應該添加到鏈表的末尾。我不確定如何實現這一點,給新的屬性玩。ArrayList和節點

第一個版本:

private static class AssassinNode { 
    private String player; 
    private String killer; 
    private AssassinNode next; 
    private AssassinNode(String name) { 
     this.player = name; 
     this.killer = null; 
     this.next = null; 
    } 
} 

private AssassinNode killring; // the head of the kill ring linked list - first link 
private AssassinNode graveyard; // the head of the graveyard linked list - second link 

public AssassinManager(ArrayList<String> players) { 
    if (players == null || players.isEmpty()) { throw new IllegalArgumentException(); } 
    killring = new AssassinNode(players.get(0)); // create first node - for the killring 
    AssassinNode node = killring; 
    for (int i = 1; i < players.size(); i++) { // Add a new node at the end of each killing 
     node.next = new AssassinNode(players.get(i)); 
     node = node.next; 
    } 
} 

新版本:

private KillList killring; 
private AssassinNodeData graveyard; 

public AssassinManager(ArrayList<String> players) { 
    if (players == null || players.isEmpty()) { throw new IllegalArgumentException(); } 
    killring = new KillList(players.get(0)); 
    KillList node = killring; 
    node.addAll(players); 
} 

KillList extends LinkedList<AssassinNodeData>現在我想要達到同樣的事情,而無需使用next

類之間的關係:KillList(子類)和AssassinNodeData(超)

任何建議或解決方案是非常感謝!

+0

你可能想要寫一個插入方法,但一般要添加到鏈接列表的唯一方法是使用一個屬性遍歷列表 –

+0

node.addAll(播放器),嘗試這樣 – Hemakumar

+0

你好@ cricket_007 :)所以你的意思是唯一的方法就是讓它在第一個版本中擁有它?我不熟悉你所指的 - 寫一個插入方法? – Ani

回答

1

如果你能夠改變AssassinNode你可以這樣做。

public class AssassinNode { 

    private final String player; 
    private AssassinNode parent; 
    private AssassinNode child = null; 

    AssassinNode(String player, AssassinNode parent) { 
     this.player = player; 
     this.parent = parent; 
     addToParent(parent); 
    } 

    void setChild(AssassinNode child) { 
     this.child = child; 
    } 

    private void addToParent(AssassinNode parent) { 
     parent.setChild(this); 
    } 
    // other getters and code 
} 

public class AssassinManager { 

    LinkedList<AssassinNode> killring = new LinkedList<>(); 

    public AssassinManager(List<String> players) { 
     if (players == null || players.isEmpty()) { 
      throw new IllegalArgumentException(); 
     } 
     AssassinNode assassin = null; 
     for (String player : players) { 
      assassin = new AssassinNode(player, assassin); 
      killring.add(assassin); 
     } 
    } 

    public static void main(String[] args) { 
     List<String> players = Arrays.asList("eizo", "shay", "arno", "arbaaz"); 
     AssassinManager manager = new AssassinManager(players); 
    } 
} 
+0

您好!我嘗試了你的解決方案並實現了我自己的方式 - 但是'killring.add(assassin)'顯示一個錯誤,指出「沒有找到適合add(AssassinNode)的方法」,另一種方法是創建一個'add(AssassinNode)'方法刺客節點。 – Ani

+0

@Ani你說'KillList擴展LinkedList '所以它應該有一個'add'。正如你沒有告訴'AssassinNodeData'和'AssassinNode'之間有什麼區別,我認爲他們的意思是一樣的。 – SubOptimal

+0

不,他們是不同的。因此他們的名字。你能否詳細說明add()。就像在KillList類中創建一個add方法一樣? – Ani