2012-04-26 97 views
0

我在做二進制搜索字符串,它顯示輸出錯誤。我不知道我缺少什麼,我需要一些建議。二進制搜索輸出錯誤

這裏我的代碼:

public static final int Not_Found = -1; 

    public static int BS(String[][] record, String x) 
{ 
int low = 0; 
int high = record.length - 1; 
int mid; 

while(low <= high) 
{ 
mid = (low + high)/2; 

if(record[ mid ].compareTo(x) < 0) 
low = mid + 1; 
else if(record[ mid ].compareTo(x) > 0) 
high = mid - 1; 
else 
return mid; 
} 

return Not_Found; 
    } 

它,我失去了一些東西?或者我必須用其他方式找到它?

這裏錯誤:

錯誤:找不到符號 如果(記錄[MID] .compareTo(x)的< 0) ^ 符號:方法的compareTo(字符串)

錯誤:無法找到符號 否則,如果(記錄[MID] .compareTo(X)> 0) ^ 符號:方法的compareTo(字符串)

+0

您無法將字符串與字符串數組進行比較。 – 2012-04-26 00:21:14

+1

您正在使用「String [] [] record」。如果是1d記錄,請使用「String []記錄」。 – Arpssss 2012-04-26 00:24:19

+0

我應該如何處理2D數組?有什麼建議? – user1342633 2012-04-26 00:27:36

回答

1

record是一個2D數組,因此record[j]將給出一個數組而不是一個字符串。你有沒有想用一維數組來代替?

+0

我在做2D數組,所以我應該如何處理它? – user1342633 2012-04-26 00:27:05

+0

既然二進制搜索是以「線性」方式完成的,也許你可以通過連接所有行來將2D-數組拉伸成一維數組。然後你可以用普通的二分查找搜索這個新數組。或者類似地,您可以使用for循環搜索2D record數組的每一行。 – arshajii 2012-04-26 00:31:20

+0

如果可能的話,我會盡力去做,謝謝你的建議,非常感謝。 – user1342633 2012-04-26 00:40:22

1

您正在使用「String [] []」表示2D記錄。因此,記錄[j]給出相應的第j列字符串數組。無法與字符串進行比較。因此,如果是1d記錄,請使用「String []記錄」。

+0

因此,如果我想在2D上工作,我需要更改差異格式代碼?或者我只需要改變其中的一些? – user1342633 2012-04-26 00:31:30

+0

看你的代碼必須搜索每個記錄[中] [我]來比較字符串。這樣你就無法比較。例如,記錄[0] [0] = 7,記錄[1] [0] = 5,記錄[2] [0] = 0,記錄[2] [1] = 5。結果,因爲你的中期會給錯誤的中期。你可以像這樣做,rec [0] = record [0] [0],rec [0] = record [0] [1] ...等等(使用另一個臨時數組來存儲記錄)。然後執行二分查找並返回結果位置轉換爲記錄[] []行 - 列號。我認爲這會更簡單。 – Arpssss 2012-04-26 00:59:48