2016-11-10 5 views
1

다음과 같은 문제가 있습니다. Entry라는 개체가 포함 된 연결된 목록 또는 위치 목록이 있습니다. 각 항목에는 키와 값 쌍이 저장됩니다. 그 목록에서 키를 가져 오기 위해 다른 연결된 목록을 만들고 싶습니다. 나는 그렇게하는 방법을 생각해 냈습니다. 그러나 키 목록을 인쇄 할 때 몇 가지 이유 때문에 그들이 추가 한 순서가 표시되지 않습니다. printKeySet는 키 집합의 결과를 소요() 전체 키 목록을 인쇄하는 동안,다른 연결된 목록에서 키를 포함하는 링크 된 목록 반환

public PositionalList1<K> keySet() //I prnted position by position while adding and it worked. I also tested addAfter with positionalList1 class and it worked 
{ 
    PositionInterface<Entry> iterator = map.first(); //gets first position in the Entry List 
    PositionInterface<K> first = keyList.addFirst((K)iterator.getData().getKey()); //adds to list containing just keys the key from the Entry list(getData is just a method that returns whatever object is stored at the node, in this case a Entry Object) 
    iterator = map.after(iterator); //go to next node in Entry list 

    for(int i=0;i<size-1;i++) //get rest of keys 
    { 
     PositionInterface<K> p = keyList.addAfter(first,(K)iterator.getData().getKey()); 
     iterator = map.after(iterator); 

    } 
    return keyList; 
} 

public void printKeySet(PositionalList1 list) //print key list 
{ 
    PositionInterface p = list.first(); 
    for(int i=0; i<list.size();i++) 
    { 
     System.out.println("Key : " + p.getData()); 
     p = list.after(p); 
    } 
} 

키 집합() 메서드는 키가 포함 된 목록을 반환 : 나는 다음과 같은 두 가지 방법이있다. 이것은 등의 정렬 된 목록 (1, C) (2, A) ... 결과

OrderedMapL<Integer,String> map2 = new OrderedMapL<Integer,String>(); 
    map2.put(2,"A");//adds (2,A) 
    map2.put(5,"B");//adds(5,B) 
    map2.put(1,"C");//adds(1,C) 
    map2.put(4,"D");//adds(4,D) 
    map2.put(3,"E");//adds(3,E) 
    map2.remove(2); //removes (2,A) 

및 항목 자체가 순서대로 글씨 : 나는 다음과 같은 주요 프로그램을 사용하여이 문제를 테스트했습니다. 키가 순서대로 인쇄하는 몇 가지 이유를 들어

PositionalList1<Integer> keyList = map2.keySet(); 
map2.printKeySet(keyList); 

: 다음 호출 할 때 문제가 발생합니다 1,5,4,3 대신 보닐 내가 왜 아무 생각이 없습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

모든 클래스를. 우리는 그들이하는 일과 그들이하는 일을 전혀 모릅니다. 왜 표준 Java 콜렉션을 사용하지 않습니까? –

+0

이것은 내 자신의 추상 데이터 유형을 작성할 것으로 예상되는 데이터 구조 클래스 용입니다. 노드리스트 자체와 관련된 모든 보조 기능이 작동하고 테스트되었습니다. addAfter()는 매개 변수화 된 위치 다음에 위치를 추가하기 만합니다. keySet()에서 위치 1을 1 씩 인쇄했을 때 위치가 올바르게 추가 된 것처럼 극단적으로 이상합니다. 그러나 printKeySet()에서는이 순서가 표현되지 않습니다. – JmanxC

+0

또한 after()는 paramatezied 뒤에 위치를 반환하는 또 다른 nodelist 함수입니다. 함수의 이름은 그것이 무엇을하는지 거의 알려줍니다. – JmanxC

답변

1

문제는이 라인이다 : 당신은 first 후 추가 안

PositionInterface<K> p = keyList.addAfter(first,(K)iterator.getData().getKey()); 

. 그래서 잘못된 주문을받는 것입니다.

키는 1, 3, 4, 5는이처럼를 추가하는 경우 :

  1. 가 첫 번째 요소로 추가 1 1
  2. 가 첫 번째 요소 후 3 추가 1 3
  3. 가 첫 번째 요소 후 4를 추가 1 4 3
  4. 첫 번째 요소 뒤에 5를 더함 1 5 4 3

첫 번째 요소 다음에 추가하기 때문입니다.

내가 제대로 코드를 이해한다면 당신은 다음과 같이 변경한다 : 당신이 독점, 사용자 정의 클래스와 같은 모양을 사용하고

// I suspect that #addFirst method returns added list element 
PositionInterface<K> last = keyList.addFirst((K) iterator.getData().getKey()); 
iterator = map.after(iterator); 

for(int i = 0; i < size - 1; i++) 
{ 
    // I suspect that #addAfter method returns added list element 
    PositionInterface<K> last = keyList.addAfter(last, (K) iterator.getData().getKey()); 
    iterator = map.after(iterator); 

} 
+0

오류에 대한 훌륭한 설명 ...하지만 해결책은 무엇입니까? – joc

+0

와우, 바보 같은 실수를 해줘서 고마워! – JmanxC