所以我有两个不同的文本文件。第一个文本文件包含:
Apple
Banana
Berry
Lemon
Orange
第二个包含:
Banana
Juice
Kiwi
Strawberry
Water
我要输出的匹配字符串是" banana"。我知道如何使用hashsets,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))
}
}
}
答案 0 :(得分:0)
您无法将两个strings
与运营商进行比较。
String a, b;
a == b
检查a和b是否为 SAME OBJECT 。这总是错误的。
相反,请使用String.equals((String) a)
或.equalsIgnoreCase()
方法。
答案 1 :(得分:0)
二元搜索的两个主要思想:
据我所知,文件中的字符串使用字母顺序排序。当您对左侧或右侧部分进行设置时,String.compareTo
是二进制搜索所需的内容:
while (leftIndex < rightIndex) {
int middleIndex = (rightIndex + leftIndex) / 2;
String middle = strings[middleIndex];
if (target.compareTo(middle) < 0) {
rightIndex = middleIndex;
} else {
leftIndex = middle;
}
}