Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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_Binary Search Tree_String Matching - Fatal编程技术网

Java 如何实现在两个不同的文本文件中查找匹配字符串的二进制搜索方法

Java 如何实现在两个不同的文本文件中查找匹配字符串的二进制搜索方法,java,binary-search-tree,string-matching,Java,Binary Search Tree,String Matching,所以我有两个不同的文本文件。第一个文本文件包含: Apple Banana Berry Lemon Orange Banana Juice Kiwi Strawberry Water 第二部分包括: Apple Banana Berry Lemon Orange Banana Juice Kiwi Strawberry Water 我想要输出的匹配字符串是“banana”。我知道如何使用hashset、arraylists等实现这一点,但我想使用二进制搜索方法。但我一直被卡住,因为我处理

所以我有两个不同的文本文件。第一个文本文件包含:

Apple
Banana
Berry
Lemon
Orange
Banana
Juice
Kiwi
Strawberry
Water
第二部分包括:

Apple
Banana
Berry
Lemon
Orange
Banana
Juice
Kiwi
Strawberry
Water
我想要输出的匹配字符串是“banana”。我知道如何使用hashset、arraylists等实现这一点,但我想使用二进制搜索方法。但我一直被卡住,因为我处理的不是整数,而是字符串。以下是我到目前为止的情况:

public static boolean BinarySearch() throws FileNotFoundException {
        String compare;

        java.io.File firstlist= new java.io.File("firstlist.txt");
        Scanner scanner1= new Scanner(firstlist);

        java.io.File secondlist= new java.io.File("secondlist.txt");
        Scanner scanner2= new Scanner(secondlist);

        ArrayList<String> list= new ArrayList<>();
        while (scanner2.hasNextLine()){
            names.add(scanner2.nextLine());
        }

        int low =0;
        int high = list.size() -1;

        for(int i=0; i<list.size(); i++){
            compare=scanner1.nextLine();
            scanner2= new Scanner(list);

            while (high>=low){
                int middle = (low+high)/2;
                if (list.get(middle) == list.get(0)){
                    return 1;
                }
                if (list.get(middle) < list.get(0))
            }

        }
    }
public static boolean BinarySearch()引发FileNotFoundException{
字符串比较;
java.io.File firstlist=新的java.io.File(“firstlist.txt”);
扫描仪scanner1=新扫描仪(第一个列表);
java.io.File secondlist=新的java.io.File(“secondlist.txt”);
扫描仪scanner2=新扫描仪(第二个列表);
ArrayList=新建ArrayList();
while(scanner2.hasNextLine()){
name.add(scanner2.nextLine());
}
int低=0;
int high=list.size()-1;
对于(int i=0;i=low){
int-middle=(低+高)/2;
if(list.get(中间)=list.get(0)){
返回1;
}
if(list.get(中间)
您无法使用运算符比较两个
字符串

字符串a、b

a==b
检查a和b是否为同一对象。这永远是错误的


相反,请使用
String.equals((String)a)
.equalsIgnoreCase()
方法。

二进制搜索的两个主要思想:

  • 排序表
  • 比较函数
据我所知,文件中的字符串是按字母顺序排序的<代码>字符串。当您决定左或右部分时,比较是二进制搜索所需的:

while (leftIndex < rightIndex) {
    int middleIndex = (rightIndex + leftIndex) / 2;
    String middle = strings[middleIndex];
    if (target.compareTo(middle) < 0) {
        rightIndex = middleIndex;
    } else {
        leftIndex = middle;
    }
}
while(leftIndex
二进制搜索的主要规则是列表必须是sorted@AshrafulIslam你说得对,对不起。我将整理列表。你在哪里初始化变量名,firstlist,secondlist?从代码中看不明显。@VasiliyVlasov我刚刚更正了我的代码,很抱歉您缺少
if(list.get(middle)>list.get(0)){high=middle-1;}