逻辑错误,java中字符串的二进制搜索
我试图借助二进制搜索方法在数组中搜索字符串,但我的代码仅显示字符串的正确答案(java位于索引5,python位于索引8,字符串位于索引10,youtube位于索引11)。我如何解决这个问题逻辑错误,java中字符串的二进制搜索,java,string,Java,String,我试图借助二进制搜索方法在数组中搜索字符串,但我的代码仅显示字符串的正确答案(java位于索引5,python位于索引8,字符串位于索引10,youtube位于索引11)。我如何解决这个问题 String array[] = {"java", "computer", "game", "facebook", "laptop", "chrome"
String array[] = {"java", "computer", "game", "facebook",
"laptop", "chrome", "google", "youtube",
"mobile", "python", "string", "science"};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
Scanner input = new Scanner(System.in);
System.out.println("Enter a String to be search: ");
String item = input.nextLine();
int li = 0; // li => lower index
int hi = array.length-1; // hi => higher index
int mi = (li+hi)/2; // mi => middle index
boolean found = false;
while (li<=hi) {
if (item.compareTo(array[mi]) == 0) {
System.out.println("item found at index: "+ mi);
found = true;
break;
}
else if (item.compareTo(array[mi]) == -1) {
hi = mi-1;
}
else {
li= mi+1;
}
mi = (li+hi)/2;
}
if (!found)
System.out.println("Item not Found!!!");
字符串数组[]={“java”、“计算机”、“游戏”、“facebook”,
“笔记本电脑”、“chrome”、“谷歌”、“youtube”,
“移动”、“python”、“字符串”、“科学”};
数组。排序(数组);
System.out.println(array.toString(array));
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入要搜索的字符串:”);
String item=input.nextLine();
int li=0;//li=>较低的指数
int hi=array.length-1;//hi=>更高的索引
int mi=(li+hi)/2;//mi=>中间索引
布尔值=false;
而(李)
在二进制搜索中,始终考虑重复(与代码中的实际错误无关)
int li=0;//li=>较低的索引
int hi=array.length-1;//hi=>更高的索引//mi=>中间索引
而(李
对比文件说
如果参数字符串等于,则为值{@code 0}
此字符串;如果此字符串
在词典编纂上小于字符串参数;以及
值大于{@code 0},如果此字符串为
按字典顺序大于字符串参数
在二进制搜索中,始终考虑重复(与代码中的实际错误无关)
int li=0;//li=>较低的索引
int hi=array.length-1;//hi=>更高的索引//mi=>中间索引
而(李
对比文件说
如果参数字符串等于,则为值{@code 0}
此字符串;如果此字符串
在词典编纂上小于字符串参数;以及
值大于{@code 0},如果此字符串为
按字典顺序大于字符串参数
只是一个小问题
在else if
条件中,您应该检查else if(item.compareTo(array[mi])<0)
,而不是else if(item.compareTo(array[mi])==-1)
compareTo
方法如果匹配,则返回0;如果字符串小于另一个字符串(更少的字符),则返回小于0的值;如果字符串大于另一个字符串(更多的字符),则返回大于0的值。这只是个小问题
在else if
条件中,您应该检查else if(item.compareTo(array[mi])<0)
,而不是else if(item.compareTo(array[mi])==-1)
compareTo
方法如果匹配,则返回0;如果字符串小于另一个字符串(更少的字符),则返回小于0的值;如果字符串大于另一个字符串(更多的字符),则返回大于0的值。while(liwhile)(li您也可以尝试以下操作:
String array[] = {"java", "computer", "game", "facebook",
"laptop", "chrome", "google", "youtube",
"mobile", "python", "string", "science"};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
Scanner input = new Scanner(System.in);
System.out.println("Enter a String to be search: ");
String item = input.nextLine();
int index = -1;
if (Arrays.asList(array).contains(item)) {
index = Arrays.asList(array).indexOf(item);
System.out.println("item found at index: "+ index);
}
else System.out.println("Item not Found!!!");
您也可以尝试以下方法:
String array[] = {"java", "computer", "game", "facebook",
"laptop", "chrome", "google", "youtube",
"mobile", "python", "string", "science"};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
Scanner input = new Scanner(System.in);
System.out.println("Enter a String to be search: ");
String item = input.nextLine();
int index = -1;
if (Arrays.asList(array).contains(item)) {
index = Arrays.asList(array).indexOf(item);
System.out.println("item found at index: "+ index);
}
else System.out.println("Item not Found!!!");
您的字符串未按开头进行排序。二进制搜索仅适用于已排序的集合。您的字符串未按开头进行排序。二进制搜索仅适用于已排序的集合。编写代码是不够的,请给出一些解释。编写代码是不够的,请给出一些解释。