Busca de posição com binarySearch

2 respostas
java
Guilherme_Tel

Eu pensei seguinte: > "e se eu tiver números iguais em posições diferentes no meu vetor, e eu quiser saber a posição justamente desse número?"
Eu tentei isso e não tive o resultado esperado.

public static void main(String[] args) {
int vet[] = {5,3,2,7,2,6,1};
      int p = Arrays.binarySearch(vet, 2);
       System.out.println("O número dois está na posição:  " + p);
   }

Resultado: O número dois está na posição: -1

Se alguém souber o porquê isso ocorre e/ou como ter o retorno certo dessas posições, por favor, discorra aqui :slight_smile:

2 Respostas

igomes

Tudo é uma questão de LER a documentação, se você quer usar o binarySearch, leia a do mesmo que irá conseguir o que quer.

Jonas_B_a_r_r_o_s

Bom, primeiro acho que você deve ir por partes. Acho melhor tambem voce tentar fazer sem auxilio do Array.binarySearch, pois te ajuda a pensar mais, e entender melhor o problema, se voce usa-lo e não entender como ele funciona, é melhor voce mesmo fazer na ‘unha’. Primeiro tente executar o programa da forma correta, se tiver ok, blz, então para a proxima etapa. Voce quer saber em qual posicao do vetor está determinado numero?
Tente isso:

public static void main(String[] args) {

Scanner entrada = new Scanner(<a href="http://System.in">System.in</a>);

int vet[] = new int[5];

for (int i = 0; i < 5; i++) {

System.out.println(Informe o numero na posicao +i+ do vetor);

vet[i] = entrada.nextInt();

}
System.out.println("Informe numero a encontrar no vetor");
    int busca = entrada.nextInt();
    for (int i = 0; i < 5; i++) {
        if (busca == vet[i]) {
        System.out.println("O numero "+busca+" está na posicao "+i+" do vetor");
        }
        
    }
}

Agora quer saber os numeros repetidos? Tente isso:

{ public static void main(String args[])

{ Scanner entrada = new Scanner(<a href="http://System.in">System.in</a>);

int a[] = new int[10], repetidos[] = new int[10], vezes[] = new int[10];

int i, j, qtde, cont, cont_r;

for (i=0; i<10; i++)

{

System.out.print(Digite numero na posicao + (i) + " do vetor");

a[i] = entrada.nextInt();

}
cont_r = 0;
 for (i=0; i<10; i++)
 { qtde = 1;
   for (j=0; j<i; j++)
   { if (i != j)
        { if (a[i] == a[j])
             qtde = qtde + 1;
        }
    }    
     if (qtde > 1)
        { cont = 0;
          while (cont < cont_r && a[i] != repetidos[cont]) 
          {
            cont = cont + 1;
          }
          if (cont == cont_r)
             { repetidos[cont_r] = a[i];
               vezes[cont_r] = qtde;
               cont_r = cont_r + 1;

             }
          else
          vezes[cont] = vezes[cont]+1;   
        }
 }               
 for (i=0; i<cont_r; i++)
 { System.out.println("O numero " + repetidos[i] + " apareceu " + vezes[i] + " vezes");
          
 }

}

Agora você mesmo pode tentar modifca-lo/altera-lo para encontrar as posições dos numeros repetidos.

Criado 28 de maio de 2016
Ultima resposta 28 de mai. de 2016
Respostas 2
Participantes 3