2010-09-09 21 views
6
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"}; 

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality"); 

ottengo sempre -3. Il problema è in "Name". Perché non riesco ad avere "Name" nel mio array? Qualche idea?java Arrays.binarySearch non riesce a trovare bersaglio

+1

"Nome" deve essere prima di "Qualità" e "Pacchetto" deve essere prima di "Test". –

+1

binarySearch è solo per array ordinato. –

+0

@Jon, penso che volevi dire che "Pacchetto" dovrebbe arrivare prima di "Qualità". –

risposta

23

Per poter utilizzare binarySearch, è necessario ordinare l'array se stessi prima:

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"}; 

java.util.Arrays.sort(sortedArray); 

int index = Arrays.binarySearch(sortedArray, "Quality"); 
+0

thx all fast aiuto – user437630

+0

@senzacionale, prego. –

6

La matrice deve essere ordinata. Da Javadoc di binarySearch():

L'intervallo deve essere ordinato in ordine crescente in base all'ordinamento naturale dei suoi elementi prima di effettuare questa chiamata. Se non è ordinato, i risultati non sono definiti.

1

Un array devono essere ordinati per la ricerca binaria per lavorare. Il javadoc per binarySearch dice:

la matrice deve essere ordinati in ordine crescente secondo l'ordinamento naturale dei suoi elementi (come dalla ordinamento (Object metodo [])) prima di effettuare questa chiamata. Se non è ordinato, i risultati non sono definiti.

(corsivo è mio.)

E il motivo è semplice. L'algoritmo di ricerca binaria ha una precondizione che l'array di input è ordinato.