【问题标题】:Iterative Binary Search - String Array迭代二分查找 - 字符串数组
【发布时间】:2017-01-20 15:12:37
【问题描述】:

我正在尝试创建一个迭代二进制搜索函数作为工作的一部分。

我尝试搜索类似的问题,但它们往往都是针对整数数组而不是字符串数组。

我认为我的代码的问题在于字符串比较运算符没有正确执行。

如果我使用一些基本测试数据运行代码,我会得到“java.lang.NullPointerException”

如果有人可以查看我的代码并指出我哪里出错了,我们将不胜感激。谢谢!

  public int returnIndex(String searchValue)
  {
    int min = 0;
    int max = data.length -1;
    int mid;

    while (min <= max) {
      mid = min + (max - min) / 2;
      if (data[mid].compareTo(search) == 0) 
      {
        return mid;
      } 
      else if (data[mid].compareTo(search) > 0) 
      {
        min = mid + 1;
      } 
      else 
      {
        max = mid - 1;
      }
    }
    return -1;
  }

编辑:我已经包含了我的初始化和测试代码。

public class SortedVector
{
  private int maxlength;
  private int numberofitems;
  private String[] data;
  private int growby;

  public SortedVector()
  {
    maxlength = 10;
    numberofitems = 0;
    data=new String[maxlength];
    growby = 10;
  }

在 main.java 中,我调用函数并向数组添加值:

SortedVector Vector = new SortedVector();

Vector.AddItem("Yellow");
Vector.AddItem("Blue");
Vector.AddItem("Green");

System.out.println("The word Yellow is held at index: " + Vector.returnIndex("Yellow"));  

【问题讨论】:

  • 你从哪里得到这个异常?
  • 您应该将数组data 作为参数传递给此方法。
  • 在我看来,您的问题在于您的数据变量是如何初始化的,而您没有为此提供代码。如果不是数组中的所有元素都已初始化为有效的 String 对象,则 data[index] 也可能为空值。
  • 不应该是searchValue而不是search吗?两次,当你打电话给.compareTo
  • 并非如此。如果你这样做,你会得到一个例外。请将数据作为参数传递。

标签: java arrays string binary-search


【解决方案1】:

在应用此算法之前,必须对数组 data 进行排序。 此外,我强烈建议将此data 数组作为参数传递给方法。

【讨论】:

  • 哦,好的。在什么时候对数据进行排序?是在我向数组中添加项目的时候吗?
  • 您可以像排序一样简单地添加它们,即add"A", add("B")
  • 这是有道理的。谢谢。我已经修改了我的代码,但它仍然返回 -1 作为任何搜索值的索引。这几乎就像我的 while 循环没有执行一样。
  • 您是否将这个data 数组作为参数传递? System.out.println(data.length-1) 在这个方法中显示了什么?
  • 它返回 9。我不太确定我是否理解你关于它是如何传递的问题。
【解决方案2】:

我认为您只向向量添加了 3 个项目,但将其初始化为 10 个项目。然后你试图从中间位置获取项目。

【讨论】:

  • 好的,所以我尝试添加 10 种不同的颜色,如果我运行代码,我不会收到空指针异常,但它确实认为 Yellow 保留在索引 -1。跨度>
  • @GuestUser140561 必须对该数组进行排序才能使用二分搜索。
  • 我觉得初始化还是有问题。您可以为此添加代码吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
相关资源
最近更新 更多