迭代二进制搜索 - 字符串数组

时间:2017-01-19 21:51:35

标签: java arrays string binary-search

我试图创建迭代二元搜索功能,作为一项工作的一部分。

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

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

如果我运行带有一些基本测试数据的代码,我会得到一个" 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"));  

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-2)

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