Java中的二进制搜索和外接程序
为了使搜索方法更有效,我决定使用二进制搜索。我想使用此搜索将找到的单词列表中的每个项目行号添加到,并显示找到每个项目的次数。但我的代码似乎不起作用Java中的二进制搜索和外接程序,java,Java,为了使搜索方法更有效,我决定使用二进制搜索。我想使用此搜索将找到的单词列表中的每个项目行号添加到,并显示找到每个项目的次数。但我的代码似乎不起作用 private static void searchAndAdd(List<Word> wl, String w, int ln) { boolean found = false; Iterator<Word> wit = wl.listIterator(); int min = 0; int
private static void searchAndAdd(List<Word> wl, String w, int ln) {
boolean found = false;
Iterator<Word> wit = wl.listIterator();
int min = 0;
int max = wl.size()-1;
int bsearch = binarySearch(wl, w, min, max);
while (found && wit.hasNext()) {
Word wd = wit.next();
if (bsearch == -1 )
{
wd.addLineNumber(ln);
}
}
if (!found)
wl.add(0, new Word(w, ln));
}
private static int binarySearch(List<Word> arr, String w, int min, int max) {
if (min < max) {
return NOT_FOUND;
}
int mid = (min + max) /2;
Word w2 = arr.get(mid);
if (w.compareTo(w2.toString()) > 0) {
return binarySearch(arr, w, mid + 1, min);
} else if (w.compareTo(w2.toString()) < 0) {
return binarySearch(arr, w, min, mid - 1);
} else {
return mid;
}
不确定这是您唯一的问题,但我怀疑您的二进制搜索不会搜索任何内容,因为有以下行:
if (min < max) {
return NOT_FOUND;
}
if(最小值<最大值){
未找到返回;
}
这对于非空列表总是如此。它在Concordance.binarySearch(Concordance.java:131)在Concordance.searchAndAdd(Concordance.java:114)在Concordance.main(Concordance.java:51)的线程“main”中一直给我这个errorException似乎没有添加行。如果不是递归的,它的性能会更好。我们没有您的行号。请编辑您的帖子以显示NPE发生的位置。您还需要将实际使用的代码粘贴到其中,而不是一路编辑。我认为这不是您真正的代码的原因:“found”变量从来都不是false,因此您不会进入该循环。此外,整个MIN最大值意味着你永远都无法进入二进制搜索方法来获得NPE。你可能想考虑在二进制搜索上写一些单元测试。这行中还有一个bug:returnbinarysearch(arr,w,mid+1,min);使用调试器,在该行放置断点(比较最小值和最大值的断点),然后查看值。
if (min < max) {
return NOT_FOUND;
}