【发布时间】: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