Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用二进制搜索进行搜索_Java_Binary Search - Fatal编程技术网

Java 使用二进制搜索进行搜索

Java 使用二进制搜索进行搜索,java,binary-search,Java,Binary Search,我试图运行这段代码,通过使用二进制搜索来搜索一个名称,但它不起作用。 这个代码或方法有什么问题 public static int BinarySearchForStudentsName(String StudentName[],String Name) { int left = 0; int right = count - 1; int middle; while (true) { middle = (left + right) / 2;

我试图运行这段代码,通过使用二进制搜索来搜索一个名称,但它不起作用。 这个代码或方法有什么问题

 public static int BinarySearchForStudentsName(String StudentName[],String Name) {
    int left = 0;
    int right = count - 1;
    int middle;
    while (true) {
        middle = (left + right) / 2;
        int copmarison = Name.compareTo(StudentName[middle]);
        if (Name.equals(StudentName[middle])) {
            return middle;
        } else if (left > right) {
            return count;
        } else {
            if (copmarison > 0) {
                middle = middle + 1;
            } else {
                middle = middle - 1;
            }
        }
    }
}
    public static void main(String[] args) {
String a[]={"A","B","C","D"};
int index = BinarySearchForStudentsName(a,"M");
    if (index == count) {
        System.out.println("not found");
    } else {
        System.out.println("founded at " + index);
    }
}}

您需要更新
左侧
右侧
值,而不是
中间的
。如下所示进行更改

while (true) {
    middle = (left + right) / 2;
    int copmarison = Name.compareTo(StudentName[middle]);
    if (Name.equals(StudentName[middle])) {
        return middle;
    } else if (left > right) {
        return count;
    } else {
        if (copmarison > 0) {
            left = middle + 1;
        } else {
            right = middle - 1;
        }
    }
}

找一个名字,你拿一个电话簿。在正中间打开它。有3种可能性:

1) 你很幸运,你找到了名字,搜索结束

2) 名称为“更大”(按字母顺序排列)。撕下电话簿的左半部分并重新启动

3) 您正在搜索的名称为“较小”。撕下电话簿的右半部分,重新开始

代码怎么了

1) BinarySearch需要排序数组:

String a[]={"Aureliano","Cruise","Hatchi","Zaboumba"};
2) “compareTo”的返回值应该指导搜索,而不是“left>right”这样的比较。“CompareTo”返回0,或返回小于0的内容,或返回大于0的内容


3) 如果搜索到的姓名不存在,那么在某个时候电话簿中就不会有页面了。同样,您的代码不应该使用无限循环:与其使用“while(true)”,不如考虑一个包含变量“left”和“right”的条件。

1。数组中没有名为“Me”的值。2.在搜索之前需要对数组进行排序。很抱歉,我在编写数组时忘记了对数组进行排序,但同样的事情仍然不起作用。。。。关于“我”的价值,我想尝尝它是否会返回“未找到”或“未找到”。。。那么为什么要搜索呢?
String StudentName[]
不可能正确。您的变量
copmarison
拼写错误。您的变量
count
未定义。修好这个。哦,你说得对。非常感谢