2012-10-06 9 views
2

프로그래밍을 시작하는 단계에 있으며 두 개의 목록을 결합하여 하나의 목록을 만들어 번호순으로 나열합니다. 문제가되는 부분은 코드를 반복 할 수 있도록하는 단계입니다. 즉, 원본 목록의 모든 숫자를 조합하여 최종 목록을 완성하기 위해 전체 원본 루프를 실행하도록 단계를 반복합니다. 루프에 대한 지침을 주시면 감사하겠습니다. 고맙습니다.내 목록이 반복되어 전체 목록이 결합되도록합니다.

import inClass.list.EmptyListException; 
import inClass.list.List; 

public class InitialLists { 

    public static void main(String[] args) { 

    List<Integer> intObject1 = new List<Integer>();{ 

     intObject1.insertAtFront(25); 

     intObject1.insertAtFront(19); 

     intObject1.insertAtFront(3); 

     intObject1.print();} 

    List<Integer> intObject2 = new List<Integer>();{ 

     intObject2.insertAtFront(120); 

     intObject2.insertAtFront(1); 

     intObject2.print();} 

    List<Integer> combinedList = new List<Integer>(); 

    int object1 = intObject1.removeFromBack(); 
    int object2 = intObject2.removeFromBack(); 

     while(intObject1.removeFromBack() != null && intObject2.removeFromBack() != null){ 

    try { 


     { 
      if (intObject1.removeFromBack() > intObject2.removeFromBack()) { 
       combinedList.insertAtFront(object2); 
       intObject1.insertAtBack(object1); 
      }   
      else if (intObject2.removeFromBack() < intObject1.removeFromBack()) { 
       combinedList.insertAtFront(object1); 
       intObject2.insertAtBack(object2); 
      } 
      else if (intObject1.removeFromBack() == intObject2.removeFromBack()) { 
       combinedList.insertAtFront(object1); 
      } 
     } 
      combinedList.print(); 

      object1 = intObject1.removeFromBack(); 
      object2 = intObject2.removeFromBack(); 

     } // end try 

     catch (EmptyListException emptyListException) { 
      emptyListException.printStackTrace(); 
     } // end catch 
     } //end while 
    } // end main 

}// end class 
+0

'List '가 인터페이스이기 때문에'new List()'를 사용할 수 없다고 생각합니다. 불필요한'{}'블록도 있습니다. 정렬되지 않은 방식으로 목록을 결합한 다음 최종 목록을 정렬하는 것을 고려 했습니까? – DNA

+0

@DNA 그것은 사용자 정의'List'를 사용하고 있습니다.'.insertAtFront()'와'.removeFromBack()'메소드를 주목하십시오. – NullUserException

+0

@kassie [mergesort] (http://en.wikipedia.org/wiki/Merge_sort)에서 아이디어를 얻을 수 있습니다. – NullUserException

답변

1

무엇에 대해 :

List<Integer> combinedList = new ArrayList<Integer>(); 
combinedList.addAll(intObject1); 
combinedList.addAll(intObject2); 
Collections.sort(combinedList); 

아니면 내가 뭔가를 놓친 거지?

+1

숙제 과제처럼 보이므로 OP가 그렇게 할 수 있을지는 의문입니다. – NullUserException

+1

그건 정확히 내가 숙제에 대해 싫어하는 것입니다 : 그들은 당신에게 고품질의 잘 테스트 된 코드를 사용하지 말고 장기적으로 "여기에서 발명되지 않았습니다."라는 것을 가르칩니다. – Matthias

+0

+1 나는 정확히 똑같은 것을 제안하려고했기 때문에 +1. 질문은이 할당에 대해 어떤 연산이 허용되는지 명확히해야합니다. 예를 들어 커스텀'List' 타입이'java.util.List'를 확장하는지 알 수 없습니다 ... – DNA

0

두 개의 파일/목록을 병합하려면 /이

WHILE NOT FINISHED 
    GET SMALLEST VALUE FROM INPUTS 
    APPEND SMALLEST VALUE TO OUTPUT 

같은 비트가 어떻게 당신이 완료되는 것을 알 수 보이는 루프를 필요로 스트림?

각 목록에서 다음 항목 중 가장 작은 항목을 어떻게 얻을 수 있습니까?

위 코드는 의사 코드라고합니다. 알고리즘의 단계를 설명하는 방법입니다. 선택한 언어 (이 경우 Java)로 구현할 수있는 의사 코드가있을 때까지 각 단계를 계속 확장하십시오. 도움이

희망 ...

0

나는 당신의 문제는 두 목록의 가능한 고르지 크기 것 같다.

Integer object1 = intObject1.removeFromBack(); 
Integer object2 = intObject2.removeFromBack(); 
while(object1 != null || object2!= null){ 
    if(object1 ==null){ 
     //safe to assume object2 is not null as both not null together (that is the termination condition) 
     combinedList.insertAtFront(object2); 
    }else if(object2 ==null){ 
     //safe to assume object1 is not null as both not null together (that is the termination condition) 
     combinedList.insertAtFront(object1); 
    }else{ 
     //put you normal condition of handling object1 and object2 being not null 
     if (object1.intValue() > object2.removeFromBack()) { 
      combinedList.insertAtFront(object2); 
      intObject1.insertAtBack(object1); 
     }   
     else if (object2.intValue() < object1.intValue()) { 
      combinedList.insertAtFront(object1); 
      intObject2.insertAtBack(object2); 
     } 
     else if (object1.intValue() == object2.intValue()) { 
      combinedList.insertAtFront(object1); 
     } 
    } 
    object1 = null; 
    object2 = null; 
    try{ 
     object1 = intObject1.removeFromBack(); 
    }catch (EmptyListException emptyListException) { 
     //do nothing 
    } // end catch 
    try{ 
     object2 = intObject2.removeFromBack(); 
    }catch (EmptyListException emptyListException) { 
     //do nothing 
    } // end catch 
} 

이 또한 유의하시기 바랍니다 : 아래 while 조건을 넣어보십시오 merge 두 정렬 된 목록 요소의 일을 더 좋은 방법이있다. 이 접근법은 약간 익히 알려진 맞춤형 List 클래스를 고려하여 권장됩니다.

관련 문제