Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的二进制搜索和外接程序_Java - Fatal编程技术网

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;
 }