2016-06-14 4 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 (플레이어)를 반복하는 다음의 속성을 사용하는 것입니다 @ cricket_007 :) 그렇다면 첫 번째 버전에서 어떻게 사용했는지 알 수 있습니까? 나는 당신이 암시하고있는 것에 익숙하지 않다. 삽입 방법을 써라. – Hemakumar

+0

같은 시도 목록 – 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

Hello! 난 당신의 솔루션을 시도하고 내 자신의 방식을 구현 - 그러나'killring.add (assassin)'은 "add (AssassinNode)에 적합한 메소드가 없다"라는 오류를 보여주고, 다른 방법은 다음과 같이'add (AssassinNode)'메소드를 어쌔신 노드. – Ani

+0

@Ani 당신은'KillList가 LinkedList 를 확장 했으므로'add'가 있어야한다고 말했습니다. 당신이'AssassinNodeData'와'AssassinNode'의 차이점을 말하지 않았기 때문에 나는 그들이 같은 것을 의미한다고 생각했습니다. – SubOptimal

+0

아니요, 그들은 다릅니다. 그러므로 그들의 이름. add()에 대해 자세히 설명해 주시겠습니까? KillList 클래스에서 add 메소드를 생성하는 것과 비슷합니까? – Ani