Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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,我试图用Java实现二进制搜索。我用的是一个素数数组,最多100个。代码如下: 导入java.util.array; 公共班机{ 公共静态void main(字符串[]args){ 二进制搜索(新的int[]{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97},29,0,24); } 公共静态int二进制搜索(int[]数组,int键,int最小值,int最大值){ 整数平均=(最小+最大)/2; if(

我试图用Java实现二进制搜索。我用的是一个素数数组,最多100个。代码如下:

导入java.util.array;
公共班机{
公共静态void main(字符串[]args){
二进制搜索(新的int[]{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97},29,0,24);
}
公共静态int二进制搜索(int[]数组,int键,int最小值,int最大值){
整数平均=(最小+最大)/2;
if(Arrays.asList(sortedArray.contains)(键)){
如果(平均值==关键值){
System.out.println(“您猜对了数字,它是:“+平均值”);
收益率平均值;
}否则如果(关键点>平均值){
System.out.println(“键大于平均值,返回循环:“+average”);
返回二进制搜索(sortedArray,key,average+1,max);
}否则{
System.out.println(“键小于平均值,返回循环:“+average”);
返回二进制搜索(sortedArray,key,min,average-1);
}
}否则{
返回-1;
}
}

我认为在
main
中调用
binarySearch
可能有问题,但我不确定如何实现它。

您可以在
java.util.Collections#binarySearch(java.util.List代码中有两个主要问题(如果使用调试器运行代码,您可以很容易地解决这两个问题):

  • if(Arrays.asList(sortedArray).contains(key)){

    为什么需要这个?此方法的全部目的是搜索密钥,因此不应调用此代码。此外,此代码不起作用,因为
    Arrays.asList(sortedArray)
    将返回一个
    列表
    一个
    列表
    ,该列表永远不会包含键,因此此表达式将始终返回false

  • 如果要将键与列表中的索引进行比较,则应将其与索引中的元素进行比较:

     if (sortedArray[average] == key) {
    


  • 你面临的问题到底是什么?在我看来,这不像是一个二进制搜索算法。它很接近,但不太接近。你从哪里得到了
    数组。asList(sortedArray)。contains(key)
    ?你应该在
    min
    max
    之间的中点测试值(在您的代码中,
    average
    索引处的元素,在我看来,
    average
    的更好名称应该是
    mid
    )。目前您正在针对
    键测试索引,而不是针对
    键测试索引处的元素。我使用了数组。asList(…)要检查数组是否包含给定的素数,如果不返回-1另一个问题,是否正确声明了素数数组,或者我应该以其他方式声明它?此外,递归实现是否是处理此搜索的最佳方法?
    
     } else if (key > sortedArray[average]) {