2015-05-02 96 views
0

該函數的對象是獲取用戶輸入以查找已添加到二叉搜索樹中的單詞。然後在BST中使用我的搜索算法,如果找到該單詞,則打印該單詞的頻率。我的方法是採取用戶輸入並創建一個新的Word對象,然後使用tree.search函數BST來查找單詞,但這不是找到該單詞。我不確定我是否應該從用戶輸入創建一個新的Word對象,所以我認爲我的錯誤在於此。在二叉搜索樹中搜索Word對象

這裏是我的主要做法:

public static void search(BST tree){ 
    Scanner input = new Scanner(System.in); 
    System.out.print("Search For: "); 
    Word searchWord = new Word(input.next()); 

    if (tree.search(searchWord) == null){ 
     System.out.println("Value was not found."); 
    }else{ 
     System.out.println(searchWord.getFrequency()); 
    } 
} 

這是我的Word類:

public class Word { 
    private String word; 
    private int frequency; 

    public Word(String w, int f){ 
     word = w; 
     frequency = f; 
    } 
    public Word(String w){ 
     word = w; 
    } 
    public void increment(){ 
     frequency++; 
    } 
    public String getWord(){ 
     return word; 
    } 
    public int getFrequency(){ 
     return frequency; 
    } 
    public int compareTo(Word w){ 
     return word.compareTo(w.getWord()); 
    } 
    @Override 
    public String toString(){ 
     return word +" "+ frequency; 
    } 
} 

這裏是我的BST搜索算法:

public Node search(Word w){ 
    if (root == null){ 
     System.out.println("No items to search."); 
     return null; 
    }else{ 
     return search(w,root); 
    } 
} 
private Node search(Word w, Node n){ 
    if (w == n.getData()){ 
     return n; 
    } 
    if (w.compareTo(n.getData()) < 0){ 
     if(n.getLeft() == null){ 
      System.out.println("Item not found."); 
      return null; 
     }else{ 
      return search(w, n.getLeft()); 
     } 
    }else{ 
     if (n.getRight() == null){ 
      System.out.println("Item not found."); 
      return null; 
     }else{ 
      return search(w, n.getRight()); 
     } 
    } 
} 

回答

1

有兩個問題您碼。

  1. 這執行指針比較:if (w == n.getData())。你想比較對象內的數據,所以改爲寫if (w.equals(n.getData()))

  2. 但是現在您仍然需要覆蓋Word.equals(),以便每當兩個封閉的字符串具有相同的內容時它將返回true。就像這樣:

    public boolean equals(Object other) { 
        if (!(other instanceof Word)) 
         return false; 
        return word.equals(((Word)other).word); 
    } 
    
+0

在將張貼在第二個問題的代碼去什麼課? Word還是BST課? – JCCS

+0

「現在你仍然需要重寫Word.equals()」 – Nayuki