我编写了一个程序,用于搜索字符串排序数组中的字符串。我的程序工作正常,除了我的数组中有空字符串的时候。以下是代码:
public class StringSearch {
public static int binarySearchString(String[] s, String search)
{
int low = 0;
int high = s.length-1;
int mid;
while(low<=high)
{ mid = (high+low)/2;
if(search.compareTo(s[mid])<0)
high = mid-1;
else if(search.compareTo(s[mid])>0)
low = mid+1;
else
return mid;
}
return -1;
}
public static void main(String[] args)
{
String[] str = {"abc", "", "def", "ijk", "mnop", "xyz"};
String toSearch = new String("ijk");
int result = binarySearchString(str, toSearch);
if(result == -1)
System.out.println("String not found!!");
else
System.out.println("String found at array index:" + result);
}
}
我在哪里犯了错误?
答案 0 :(得分:1)
您的数组实际上没有排序:空字符串应该在数组中排在第一位。
然而,话说回来,你的“ijk”测试用例应该仍然可以在中点之后工作,所以避免了数组的未排序部分。
所以我运行了你的代码并正确返回
String found at array index:3
它无法搜索“”。
在通话Arrays.sort(str)
之前添加binarySearchString
。