逻辑错误,java中字符串的二进制搜索

逻辑错误,java中字符串的二进制搜索,java,string,Java,String,我试图借助二进制搜索方法在数组中搜索字符串,但我的代码仅显示字符串的正确答案(java位于索引5,python位于索引8,字符串位于索引10,youtube位于索引11)。我如何解决这个问题 String array[] = {"java", "computer", "game", "facebook", "laptop", "chrome"

我试图借助二进制搜索方法在数组中搜索字符串,但我的代码仅显示字符串的正确答案(java位于索引5,python位于索引8,字符串位于索引10,youtube位于索引11)。我如何解决这个问题

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(li
    while)(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!!!");
    

    您的字符串未按开头进行排序。二进制搜索仅适用于已排序的集合。您的字符串未按开头进行排序。二进制搜索仅适用于已排序的集合。编写代码是不够的,请给出一些解释。编写代码是不够的,请给出一些解释。