gpt4 book ai didi

java - 在二叉搜索树中搜索Word对象

转载 作者:行者123 更新时间:2023-12-01 11:35:53 25 4
gpt4 key购买 nike

此函数的目的是获取用户输入以查找已添加到二叉搜索树中的单词。然后使用我在BST中的搜索算法,如果找到该单词,则打印出该单词的频率。我的方法是接受用户输入并创建一个新的 Word 对象,然后使用 tree.search 函数 BST 来查找单词,但这并没有找到单词。我不确定是否应该从用户输入创建一个新的 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. 这将执行指针比较: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);
    }

关于java - 在二叉搜索树中搜索Word对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29998484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com