Galéra to com uma seguinte dúvida simples. O método binarySearch retorna uma posição do array. Caso não exista a posição ele retornará a posição que será inserida. O método para encontrar a posição que será inerida é (-(pos)-1). Em um array de 5 posições ele retornará -6, em um array de 4 posições ele retornará -5.
O que ha de errado?
como assim o que há errado ? a saída é -5 nesse caso !
anderson.bonavides
Ahh desculpa acabei não completando. Quando tentei determinar a saída eu disse que era -6. Por que deu errado?
Raff
vamos contar juntos huauhahu
{1,2,4,5,7}
0 1 2 3 4 o número 6 deveria ser inserido aqui (por isso o nome ponto de inserção) então quando fazemos Arrays.binarySearch(numbers, 6); não existe o seis mais onde ele deveria se colocado é na posição 4. Dai faz a - 4 - 1 = -5 espero ter ajudado !!!
Raff
{1,2,4,5,7} só para arrumar os indices!!
{0,1,2,3,4}
Raff
qualquer dúvida só gritar!
anderson.bonavides
Compilando e testando verifiquei com base no que vc me explicou e continuo com a dúvida. Se eu alterar meu array para:
A saída será -4. Pelo o que vc explicou não seria -3?
Raff
isso é por que o array não está ordenado
sendo assim a saída não é previsivel !!!
Raff
agora se você fazer assim
Arrays.binarySearch(inter, 3);//onde o 3 deveria estar ?.. devia estar no 1 então retornará -1 - 1 = -2 espero ter ajudado !
Raff
tipo anderson quando o vetor estiver desordenado retornará um valor imprevissivel … (note isso !)
anderson.bonavides
Ralf eu não sei pq mas tentei ordenar o array utilizando Arrays.sort(numbers); e a saída não foi legal continuou a mesma saída.
:roll:
Raff
coloca seu código aqui para mim ver como está !!!
anderson.bonavides
Agora saiu!
Reeeeee
Vlw Ralf pela força!
Raff
era para funcionar
int[] a = new int[]{1,5,4};
Arrays.sort(a);
System.out.println(Arrays.binarySearch(3));
a saida é -2! como deveria seer
sim por que ele teria que estar no indice 3 dai -1 - 3 = -4 !
anderson.bonavides
Só mais uma coisa para encerrrar. É possível sobrescrever o método Arrays.sort()?
int[] numbers = {2,4,7,1,2,4,5};
Arrays.sort(numbers, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
A compilação apresenta erro. Mas por se tratar de um método fiquei na dúvida se é possivel sobrescrever! Obs: ele não é final. Mas é statico isso tem haver?
anderson.bonavides
Ralf Sobre o método binarySearch ficou exclarecido. Desde já agradeço.
Raff
cara você quer sobrescrever o metodo sort… ou sobrecarregalo ? se for sobrescrever faz uma classe que extends Arrays… e sobrescreva o metodo…(não sei para que você faria isso mas…) !!!
Raff
e outra ele sendo um metodo static não existe sobrecrição de metodo estático… o polimorfismo não funciona!!!
anderson.bonavides
Ahh ta o método sort é estático então ai está o erro.
B
brunoprogramadorjava
Seguindo o mesmo assunto fiquei um pouco com dúvida nessa
package colecoes;
import java.util.Arrays;
public class Tester2{
public static void main(String[] args) {
Ou seja -1 é igual a posicão --> (-(-1)+1)
Se "You" não estiver no vetor, o metodo retorna que ele deveria ser inserido na posição "o"!
Agora porque you vem em primeiro lugar ae ja não sei...
ribclauport
Aff… a palavra “You”, está com letra maiúscula!, sendo assim é considerada a primera palavra do vetor quando for ordeando!, palavras com letra maiuscula vão vir antes!
Exemplo: “Java”, vem antes de “java”. No vetor como “You” é a única com letra maiúscula, vai ser a primeira palavra na ora da ordenação.
mude de “You” para “you” e veja o que acontece!