【问题标题】:Find the middle element of a string array查找字符串数组的中间元素
【发布时间】:2020-11-05 00:47:07
【问题描述】:

我想知道如何在字符串数组中进行二分搜索?

public static int rechercheDicho(String cherche , String [] t) {
        int debut = 0;
        int fin = t.length-1;
        boolean trouve = false;
        
        for(int i =0;i<t.length;i++) {
         int resul = cherche.compareTo(t[i]);
        
        int milieu = (debut + fin)/2;
        while(debut <= fin && ! trouve ) {
            if(t[milieu] == resul) {
                trouve = true;
            }else if(resul > cherche) {
                fin = milieu-1;
            }else {
                debut = milieu +1;
                
            }
            milieu = (debut+fin)/2;
            
            } if(trouve) {
                return milieu;
            }else {
            return -1;
            }
        }
        }

我已经编写了这段代码,但它不起作用,因为对于 t[middle],String 和 int 之间存在冲突

【问题讨论】:

    标签: java arrays search


    【解决方案1】:

    在您的 for 循环中,您将 String 与 int 进行比较,如下所示:

    if(t[milieu] == resul)
    

    Array t 是一个字符串数组,这意味着数组中的所有项目都是字符串类型。 == 未定义用于 String 和 int 的类型比较。

    具体来说,这里:

    public static int rechercheDicho(String cherche , String [] t) {
        int debut = 0;
        int fin = t.length-1;
        boolean trouve = false;
        
        for(int i =0;i<t.length;i++) {
         int resul = cherche.compareTo(t[i]);
        
        int milieu = (debut + fin)/2;
        while(debut <= fin && ! trouve ) {
            >>>if(t[milieu] == resul) {<<<
                trouve = true;
            }else if(resul > Integer.parseInt(cherche)) {
                fin = milieu-1;
            }else {
                debut = milieu +1;
                
            }
            milieu = (debut+fin)/2;
            
            } if(trouve) {
                return milieu;
            }else {
            return -1;
            }
        }
        }
    

    我相信您应该将其解析为 int,然后像这样进行比较:

    if(Integer.parseInt(t[milieu]) == resul)
    

    或者,您可以尝试将其转换为字符串,然后使用.equals(),虽然这更繁琐且更慢

    if(t[miliu].equals(String.valueOf(resul)))
    

    【讨论】:

    • 我知道你的意思,但你不能和“”运算符比较。
    • @WanWan 抱歉。只需将其解析为 int。我已经编辑了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2021-01-14
    • 2011-02-17
    相关资源
    最近更新 更多