我试图创建迭代二元搜索功能,作为一项工作的一部分。
我尝试过搜索类似的问题,但它们往往都是整数数组而不是字符串数组。
我认为代码的问题在于字符串比较运算符没有正确执行。
如果我运行带有一些基本测试数据的代码,我会得到一个" 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"));
答案 0 :(得分:1)
在应用此算法之前,必须对数组--force
进行排序。
此外,我强烈建议将此data
数组作为参数传递给方法。
答案 1 :(得分:-2)
我认为您只向向量添加了3个项目,但已将其初始化为10个项目。然后你试图从中间位置获取物品。