2012-12-01 3 views
1

searchTree 클래스 내에 재귀 메서드를 작성하려고하는데, 어떤 이유로 메서드는 인터페이스에서 클래스 자체를 보지 않고 메서드 정의를 찾습니다. 메인 클래스의인터페이스 메서드의 재귀

: 홈페이지 내

public class BinarySearchTree<T extends Comparable<T>> implements BinarySearchTreeInterface1<T>, BinarySearchTreeInterface2<T>{` 

재귀 방법 : 다음 코드의 일부 조각이

public int getHeight(){ 
     if (isEmpty()){ 
      return 0; 
     }else{ 
      int height = 1 + Math.max(this.getLeftSubTree().getHeight(), 
             this.getRightSubTree().getHeight()); 
      return height; 
     } 
    }` 

당신은 내가 두 개의 인터페이스 클래스를 볼 수 있듯이. 이 오류는 getHeight()을 강조하고 상태 :

cannot find symbol 
symbol: method getHeight() 
location: interface BinarySearchTreeInterface1<T> 
where T is a type-variable: 
T extends Comparable<T> declared in class BinarySearchTree 

나는 Interface2 파일에 나타내었다 그들 모두가이 같은 erorr을 받고 5 개 재귀 적 방법이있다. 도움을 주셔서 감사합니다.

업데이트 : 나는 인터페이스 클래스를 대학 수업에서 게시하기를 주저하며 강사를 화나게하고 싶지 않습니다. 아이러니하게도, 재귀 적 방법은 잘 작동합니다.

public interface BinarySearchTreeInterface2<T>{ 

    public int getNumberOfNodes(); 

    public int getHeight(); 
+2

그렇다면 정말 재귀가 아닙니다. –

+0

난 그냥 내 코드를 테스트 할 수 있도록 멀리 이동하는 오류가 싶습니다. 강사는 어떻게 든 작동 시켰고, 그가 이것을 돌렸고 우리에게 답을 주었기 때문에 코드가 정확한지 확인할 수있었습니다. –

+1

그래, 그건 재귀가 아니야. 이 메소드가 'this.getHeight()'와 같은 동일한 객체의 컨텍스트 내에서 문자 그대로 자체를 호출하면 재귀 적입니다. 귀하의 경우, 동일한 메소드를 다른 오브젝트에서 호출하고 있습니다. 나는 상황을 충분히 이해하지 못한다. 인터페이스의 양쪽 모두를 위해서 (때문에)'getHeight' 메소드를 작성 했습니까? –

답변

2

getLeftSubTree()BinarySearchTreeInterface1<T>을 반환 것으로 보인다 다음은 Interface2 파일을 보여줍니다 무엇의 작은 부분이다. 그러나 getHeight()는 BinarySearchTreeInterface2<T>에 정의되어 있으므로 getHeight() 메서드는 getLeftSubTree()의 결과에서 호출 할 수 없습니다.

당신은 프로그램이이 같은 getLeftSubTree() 방법을 재정 의하여 컴파일받을 수 있습니다

물론
public BinarySearchTree<T> getLeftSubTree() { 
    ... 
} 

는 같은 getRightSubTree()으로 수행해야합니다.

+0

몇 초 후에 나를 때리십시오. 잠시 내 대답을 떠날거야 – tucuxi

+0

OMG !! 다시 돌아가 클래스 노트에서 메서드를 살펴 보았습니다. 인터페이스 클래스에서 BinarySearchTreeInterface1 으로 구현했습니다. 클래스의 노트에는 명시된대로 BinarySearchTree 이라는 코드가 표시됩니다. 해당 코드를 변경하고 오류를 제거했습니다. 이제 내 코드가 맞는지 확인해보십시오. –

0

오류가 getLeftSubTree()반환 할를 선언하는 형식이 getHeight()를 구현하지 않는 것을 말한다.

는 선언 된 형태 이 유형이 실제로 반환의 (예를 들어, 인터페이스) 슈퍼 될 수있는 방법으로 반환 할 것을 기억하십시오. 따라서 BinarySearchTreeInterface1<T> getLeftSubTree() (BinarySearchTreeInterface2을 구현하지 않음), 을 선언하고 실제로는 BinarySearchTree<T>을 반환 할 수 있으며 위에서 설명한 오류가 발생합니다.