2013-04-13 2 views
1
protected void sortHorseList(int iHorseCount) 
{ 
    int i = 0; 
    Horsie currentNode = head; 
    Horsie auxNode = new Horsie(); 
    boolean foundChange = true; 
    while(foundChange) 
    { 
     foundChange = false; 
     for(i=0; i<iHorseCount-1; i++) 
     { 
      if (currentNode.getHorseValue() > currentNode.getNext().getHorseValue()) 
      { 
       auxNode.setHorseValue(currentNode.getHorseValue()); 
       currentNode.setHorseValue(currentNode.getNext().getHorseValue()); 
       currentNode.getNext().setHorseValue(auxNode.getHorseValue()); 
       foundChange = true; 
      } 
      currentNode = currentNode.getNext(); 
     } 
    } 
} 

이 코드 표시 널 포인터 오류 메인 프로그램을 실행. 나는 데이터 구조에 초보자이며, 나는 당신들의 도움을받는 사람들과 함께이 문제를 해결하기를 희망하고있다! 제발 가르쳐주세요 사용법 버블 정렬이중 연결 목록 ... HEEELP!버블 정렬 - Null 포인터 오류

+0

관련 프로그래밍 언어로 태그하십시오. –

+0

NullPointerException을 throw하는 행은 어느 것입니까? – RyPope

+0

숙제? 아무도 연결 목록을 정렬하지 않으며 아무도 학계 밖에서 버블 정렬을 사용하지 않습니다. – EJP

답변

1

목록의 끝에 도달하면 다음 요소가 있는지 확인하지 않습니다. 따라서 값에 액세스하려고하면 null 참조 예외가 발생합니다. 귀하의 내부 루프는

current가 헤드 노드 인 경우 Swap(Horsie current, Horsie next) 교환하여 목록에서 currentnext의 장소가 선택적으로 머리를 업데이트
Horsie currentNode = head; 
    Horsie nextNode = currentNode != null ? currentNode.getNext() : null; 
    while (currentNode != null && nextNode != null) 
    { 
     if (currentNode.getHorseValue() > nextNode.getHorseValue()) 
     { 
      currentNode = Swap(head,currentNode,nextNode); 
      foundChange = true; 
     } 
     else 
     { 
      currentNode = nextNode; 
     } 
     nextNode = currentNode.getNext(); 
    } 

처럼 보일 것이다.

은 노드 개체에 대한 유일한 참조가 목록에 들어 있다고 확신하지 않는 한 노드간에 값을 바꾸지 않고 목록의 노드를 바꾸려고합니다. 당신이하지 않으면 당신은 다른 클래스에 의해 개최되는 개체가 예기치 않게 돌연변이를 일으킬 위험을 감수해야합니다.

+0

스왑 방식을 도와 줄 수 있습니까? 방법을 어떻게 시작할 수 있습니까? –

+0

@VincentSy - '현재'의 부모가 '다음'을 가리키고, '다음'이 '현재'를 가리키고, '현재'가 '다음'을 가리 키도록 (순방향) 포인터를 수정하면됩니다. 수행원. 백 포인터와 비슷합니다. 'current'가'head' 엘리먼트이고'next'가 꼬리 인 특수한 경우도 처리해야합니다. – tvanfosson

+0

어떻게해야합니까? 그것을위한 코드를 줄 수 있습니까? (BEGINNER) : \ –