2017-04-15 24 views
-3

我已經完成以下測試:的binarySearch在int數組中沒有找到正確的值0,少

int[] test1 = {1, 2, 3}; 
System.out.println(Arrays.binarySearch(test1, 3)); //prints 2 

int[] test2 = {1, 0, 3}; 
System.out.println(Arrays.binarySearch(test2, 0)); //prints 1 

int[] test3 = {1, 2, 0}; 
System.out.println(Arrays.binarySearch(test3, 0)); //prints -1 (item not found), expected value: 2 

我只是在Java實現中發現的bug或我做錯了什麼?

+0

在調用api之前閱讀JavaDoc!來自binarySearch javaDoc:在進行此調用之前,必須對數組進行排序(如{@link #sort(long [])}方法)。 –

回答

3

Binary search expects input sequence to be sorted(通過sort(byte [])方法)。

這就是爲什麼只有這一個返回正確的結果:

int[] test1 = {1, 2, 3}; // <-- this has to be sorted. 
System.out.println(Arrays.binarySearch(test1, 3)); //prints 2 

所以,你沒發現在Java中的一個錯誤:)如果你通過排序的數組以二進制搜索,那麼它不會返回正確的結果。對於未排序的數組,您必須使用順序搜索。

+0

是的。這纔是重點... –

相關問題