2012-10-28 1 views
1

트리의 "빈"부분에 대한 null 참조를 사용하는 대신 다형성 이진 검색 트리를 구현해야하는 학교 프로젝트에서 두 클래스를 사용합니다 (NonEmptyTree 및 EmptyTree)를 사용하면 특정 작업을 수행 할 때 다형성을 사용하여 작업해야합니다."빈 노드"로 null이없는 다형성 이진 검색 트리

예를 들어 비 다형성 이진 검색 트리에 특정 키 값을 삽입하려는 경우 일반적으로 트리를 이동하면서 재귀 적으로 비교할 수 있으며 compareTo 값이있을 때마다 값을 고수 할 수 있습니다 그러나이 경우 EmptyTree 클래스의 설계 (하나의 인스턴스 만 있음) 때문에 "EmptyTree.getInstance()"와 비교하여 적극적으로 비교하는 것이 금지됩니다. EmptyTree. (getInstance()는 정적 메소드입니다).

저는 지금까지 작성한 코드로 두 클래스에 대한 링크를 첨부하고 있습니다. 필자는 Pastebin의 구문 강조 기능이 모든 코드를 여기에 삽입하는 것보다 훨씬 읽기 쉽다고 생각합니다.

나는 솔루션이나 주요 경품을 찾고 있지 않지만,이 방법으로 트리를 구현하는 것은 비합리적으로 보이기 때문에 매우 좌절감을 느낀다. (나는 이미 null 참조로 상당히 완전한 BST를 구현했지만, 앞으로 나아갈 방법을 모르기 때문에이 운동은 무의미한 것처럼 보인다.) 또한, 다음 주일까지 만기가되는 것이 아니므로, 분노가 모든 지연의 결과가 아니라 내 개인적인 부적당 함의 지적 좌절입니다.

모든 의견에 감사드립니다.

NonEmptyTree 클래스 : http://pastebin.com/

EmptyTree 클래스 : 당신이 볼 수 있듯이 그것은 더 많거나 적은 효율적인처럼 보인다 http://pastebin.com/

, 내가 EmptyTree.getInstance() 메소드의 광범위하게 사용 그 장소에 스틱하기 위해 새로운 NonEmptyList를 인스턴스화해야하는지 여부를 확인하는 방법. 그러나 프로젝트 명세에 나오는 교수의 말은 구체적으로 다음과 같이 명시하고 있습니다. "비어있는 나무와 비어 있지 않은 나무의 차이점을 처리하기 위해 다형성 (예외 처리)을 사용해야합니다. 그렇게하지 않으면 결과에 큰 부정적인 영향을 미칩니다. 프로젝트 학년. "

그러나 이러한 지시 사항이 지난 강의에서 모순 된 것처럼 느껴질 수 있습니다. 즉, 메시지가 "제어 흐름"에 대한 예외 처리를 결코 사용하지 않은 것입니다. 즉 코드의 동작을 제어하는 ​​방법으로 예외를 잡아 당기는 것입니다. " Tree를 리턴하기 위해 try-catch 블록을 사용하는 하나의 메소드조차도 신성 모독처럼 느껴진다.

+0

나는 당신의 좌절을 이해합니다.그러나 Java 언어의 특정 부분에 대해 질문을 쓰는 것이 어려울 수 있다는 점을 기억하십시오. 프로그램 흐름을 제어하기 위해 예외를 사용하지 않는 것이 맞습니다. 교수가 정말로 찾고있는 것이지 또는 그의 질문이 심하게 말려 들었는지 궁금합니다. 다음 번에 만날 때 분명히 드러나시겠습니까? 그의 이전 강연에 대해 이야기 할 때 브라 우니 포인트를 얻게 될 것입니다 :-) –

+1

안녕하세요. 저는 7 시간 연속으로 코딩했습니다. 나는 그것을 전부 알아 냈다. 기본적으로 Samuel이 말했듯이 전체 연습의 요점은 대부분의 변수를 "Tree "유형으로 선언하고 두 개의 상속 된 클래스 (EmptyTree 및 NonEmptyTree )가 있으므로 클래스 중 하나에서 간단하게 지정할 수 있습니다 우리가 원하는 행동의 유형을 찾는다. 예를 들어 재귀 적으로 "insert"메서드를 호출하고 "NonEmptyList"가 전달되는 전체 시간 동안 compareTo 메서드는 올바른 위치에 고정하기 위해 키를 확인한 다음 EmptyList –

답변

0

당신은 이것을 "솔루션"또는 "주요 공짜"하지만를 고려해 볼 수 있습니다 ... 나는이 적어도 자바, 종류의 바보 같다 동의합니다.

생각은하지만, 당신의 EmptyTreeNonEmptyTree 클래스 PossiblyEmptyTree 기본 클래스의 어떤 종류에서 상속이 다음 PossiblyEmptyTree 경우 알고있는 (또는 확인) 호출하지 않고 올바른 동작을 달성하기 위해 각각 다른 메소드를 오버라이드 (override)하는 아마 비어 있거나 없습니다 ( 다형성). 솔루션에 표시 될 수

일부 코드 :

public class EmptyTree ... { 
    ... 

    public V search(K key) { 
     /* definitely not here! */ 
     return null; 
    } 
}