Dúvida questão

Olá pessoal, estou com dúvida na seguinte questão:

  1. Given a properly prepared String array containing five elements, which range of results could a 
    

proper invocation of Arrays.binarySearch() produce?
A. 0 through 4
B. 0 through 5
C. -1 through 4
D. -1 through 5
E. -5 through 4
F. -5 through 5
G. -6 through 4
H. -6 through 5

Pelo que eu entendi do livro a resposta seria E. O indice vai de 0 a 4 e a fórmula segundo o livro seria ( ( ( -1 * indice) - 1) ) . Colocando o maior indice seria (-4) - 1 = -5. -5 a 4 que seria resposta E.
A resposta pelo livro é G. Alguém me explica?

[]s
Gunnar

Concordo contigo… a regra é essa mesmo…

sim mais lembrando que 0 é uma posicao valida… se vai de 0 à 4 entao vc tem 5 elementos… e se vc contar para a esquerda vc vai ter -5 porém -5-1 vc tem -6… a resposta do livro ta correta… pq lembra do -1 que vc tem q colocar pq o 0 é valido… vá que o valor que vc fosse colocar seria no lugar do zero iai como ficaria? por isso que dar -6.

acho que não é do jeito que você falou não…
olha só:
0 = -1
1 = -2
2 = -3
3 = -4
4 = -5

abraços

[quote=gk-bgh] Pelo que eu entendi do livro a resposta seria E. O indice vai de 0 a 4 e a fórmula segundo o livro seria ( ( ( -1 * indice) - 1) ) . Colocando o maior indice seria (-4) - 1 = -5. -5 a 4 que seria resposta E.
A resposta pelo livro é G. Alguém me explica? [/quote]

Oi… a fórmula é essa daí… mas tem um detalhezinho que vc n observou:

O retorno do binarySearch retorna o índice do elemento, caso a busca tenha sucesso, ou trás o resultado da fórmula ( ( -1 * indice) - 1 ), caso a busca não tenha sucesso (onde esse índice é a posição onde o elemento buscado deveria estar, mas não está).

Então, se o elemento a ser buscado não existisse e ele fosse maior (compare() retorna > 0) do que todos os outros, então o índice dele, caso ele existisse na coleção, seria 5… mas como não existe, então o resultado é (-1 * 5 - 1), que dá -6 e, por isso, a faixa de valores é de -6 a 4.

Ex.:

String[] s = {"1","2","3","4","5"};
System.out.println(Arrays.binarySearch(s, "6")); //Exibe -6, pois deveria estar no índice 5, mas n está.
System.out.println(Arrays.binarySearch(s, "5")); //Exibe 4, pois está no índice 4.

[]'s

[quote=RafaelVS][quote=gk-bgh] Pelo que eu entendi do livro a resposta seria E. O indice vai de 0 a 4 e a fórmula segundo o livro seria ( ( ( -1 * indice) - 1) ) . Colocando o maior indice seria (-4) - 1 = -5. -5 a 4 que seria resposta E.
A resposta pelo livro é G. Alguém me explica? [/quote]

Oi… a fórmula é essa daí… mas tem um detalhezinho que vc n observou:

O retorno do binarySearch retorna o índice do elemento, caso a busca tenha sucesso, ou trás o resultado da fórmula ( ( -1 * indice) - 1 ), caso a busca não tenha sucesso (onde esse índice é a posição onde o elemento buscado deveria estar, mas não está).

Então, se o elemento a ser buscado não existisse e ele fosse maior (compare() retorna > 0) do que todos os outros, então o índice dele, caso ele existisse na coleção, seria 5… mas como não existe, então o resultado é (-1 * 5 - 1), que dá -6 e, por isso, a faixa de valores é de -6 a 4.

Ex.:

String[] s = {"1","2","3","4","5"};
System.out.println(Arrays.binarySearch(s, "6")); //Exibe -6, pois deveria estar no índice 5, mas n está.
System.out.println(Arrays.binarySearch(s, "5")); //Exibe 4, pois está no índice 4.

[]'s[/quote]

exatamente…

esse metodo retorna a posicao aonde ele vai inserir o cara (se não encontrá-lo no conjunto)… se o cara for maior que todos os outros, vai inserir depois da ultima posicao, no caso a ultima posicao é “-5”… inseriria na “-6”