【问题标题】:Binary search code in java won't run [closed]java中的二进制搜索代码不会运行[关闭]
【发布时间】:2016-09-06 13:11:09
【问题描述】:

我对编码很陌生,所以没有仇恨。我正在尝试编写二进制搜索,但是由于某种原因我的代码不起作用。

public class CodeSkillsCheck {

/**
 * @param args the command line arguments
 */


int[] value = {5,10,15,20,25,30,35,40,45,50};
int length;

  public boolean binarySearch(int num)
  {
      int small = 0;
      int big = value.length;

      while(big >= small)
      {
          int mp = (small+big)/2;
          if(value[mp] < num)
          {
              big = mp - 1;
          } else {

              big = mp + 1;
          }
      }

      return false;
  } 


public static void main(String[] args) {

    System.out.println(binarySearch(46));

   }
}

我该怎么做才能让它发挥作用?提前谢谢!

【问题讨论】:

  • 对于二进制搜索,您的数组应该被排序
  • 究竟是什么不起作用?你使用了标签“compiler-errors”,你得到了什么错误?
  • 我收到以下错误:'线程“main”中的异常 java.lang.RuntimeException:无法编译的源代码 - 表达式的非法开始'@QBrute
  • 好吧,您在main 中定义了一个方法。这不行,它必须在它之外。
  • 正确,因此错误消息应该在您的问题中。接下来,不要尝试运行无法编译的代码——你不应该遇到异常。

标签: java loops compiler-errors binary-search


【解决方案1】:

二分查找的目的是在复杂度log(n)的有序数组中找到数字的索引。


第一步:初始化

您从排序数组开始:{5,10,15,20,25,30,35,40,45,50}

small :是当前最小的索引。对于从零开始的数组,一开始它应该是 0。

big :是当前最大的索引。开头应该是数组的长度。


第二步:循环

虽然大 >= 小,但您计算中 =(小 + 大)/2。

  • 如果您要查找的值是索引中间的值,则您返回 true

  • 否则,如果您要查找的值低于索引 mid 处的值,则您希望查看数组的最低部分,因此 big 变为 mid-1。

  • ELSE (您的代码中没有这个) small 变为 mid+1,因为您现在想要查看数组的最高部分。

如果你跳出循环,意味着大小于小,那么你还没有找到值,你返回false


FINNALY : 你需要在你的 main 方法中调用一个数字的 binarySearch 方法

【讨论】:

  • 我更新了我的代码,你是这个意思吗?
  • 差不多,找到值就需要返回true。
猜你喜欢
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2018-02-05
  • 2010-09-25
  • 1970-01-01
  • 2017-06-13
  • 2013-08-09
  • 1970-01-01
相关资源
最近更新 更多