Java Trie搜索方法始终返回true的问题求助
Trie搜索功能异常原因排查
当前代码存在两处明确的逻辑错误,直接触发“任意输入都返回匹配成功、输出全量数据”的问题:
错误1:搜索方法的返回判断写成语句赋值
原方法最后一行代码:
return (current!=null)&&(current.isWord=true);
- 此处使用单等号的
current.isWord=true是赋值操作,并非相等判断:代码执行时会把true直接写入当前节点的isWord属性,整个表达式的返回结果永远为真,完全丧失了“校验当前节点是否为单词结尾”的作用。 - 修正方式:将单等号改为双等号做相等判断,代码可简化为
return current != null && current.isWord;
错误2:主循环的匹配逻辑完全偏离目标
原主循环代码:
for (String word : wordsArrayList) { System.out.println(searchInTrie(wordToSearch)); searchInTrie(wordToSearch); if (searchInTrie(wordToSearch)==true) { System.out.println(word); } }
- 循环遍历列表时,全程没有使用当前循环变量
word做匹配判断,所有分支判断反复调用同一句searchInTrie(wordToSearch)。 - 结合第一个bug的赋值问题,只要用户输入的字符串能走完循环没有碰到空的子节点,搜索方法就会固定返回true,触发循环把列表中存储的所有单词逐个打印,完全对应你遇到的异常现象。
- 额外优化点:当前代码在单轮循环里连续调用3次相同的搜索方法,属于无意义的性能浪费,且容易引发逻辑混乱。如果业务需求是“匹配用户输入的单词并展示对应存储内容”,应当先一次性调用搜索方法拿到结果,命中匹配后直接定位节点关联的内容输出,无需遍历全量列表逐行判断。
内容的提问来源于stack exchange,提问作者HonorDS
相关产品推荐
相关产品推荐

