2017-01-19 51 views
0

我试图创建一个迭代二进制搜索功能作为一部分工作。迭代二进制搜索 - 字符串数组

我试过寻找类似的问题,但他们往往都是整数数组而不是字符串数组。

我认为我的代码的问题是与字符串比较运算符不正确执行。

如果我有一些基本的测试数据运行的代码我得到一个“显示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")); 
+1

你从哪里得到这个例外? –

+2

您应该将数组'data'作为参数传递给此方法。 –

+2

在我看来,你的问题在于你的数据变量是如何初始化的,而你并没有提供代码。如果不是数组中的所有元素都被初始化为一个有效的String对象,data [index]也可能是空值。 – mba12

回答

-2

我认为你只加3项载体,但它初始化为10个项目。然后你试图从中间位置获得物品。

+0

好吧,所以我尝试添加10种不同的颜色,如果我运行代码,我没有得到一个空指针异常,但它确实认为黄色被保留在索引-1。 – GuestUser140561

+0

@ GuestUser140561这个数组必须被排序才能使用二进制搜索。 –

+0

我认为初始化仍然存在问题。你可以添加你的代码吗? – Nequeq

1

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

+0

哦,好的。我在哪一点对数据进行排序?当我向数组添加项目时? – GuestUser140561

+0

您可以简单地添加它们,就好像它们被排序一样,即'add'A',add(“B”)'。 –

+0

这是有道理的。谢谢。我修改了我的代码,但它仍然返回-1作为任何搜索值的索引。这几乎就像我的while循环没有执行。 – GuestUser140561