2017-01-19 83 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