Ajuda!

não consigo achar o erro neste programa…fiz varias vezes o teste de mesa e mesmo assim no teste sempre da certo…coloquei esses System.out.printf pra tentar ver onde tava o erro mais ta certo, o problema é q parece q ele n entra no while pq n aparece o System.out.printf q tá ali dentro e sempre vola false…
O PROGRAMA:

A pesquisa ou busca binária ( em inglês binary search algorithm) é um algoritmo de busca em coleções indexadas. Ela parte do pressuposto de que a coleção está ordenada, e realiza sucessivas divisões do espaço de busca comparando o elemento buscado (chave) com o elemento no meio do vetor. Se o elemento do meio do vetor for a chave, a busca termina com sucesso. Caso contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior do vetor. E finalmente, se o elemento do meio vier depois da chave, a busca continua na metade anterior do vetor

MEU CÓDIGO:

[code]public class Pedro{
public boolean buscaNumero(int numero, int[] conjunto){
int i=0;
int j=conjunto.length-1;
int k=(i+j)/2;

    System.out.printf("%d\n",i);
    System.out.printf("%d\n",j);
    System.out.printf("%d\n",k);
    
    System.out.printf("%d\n",numero);
    while(i==j)
    {
        if(conjunto[k]==numero)
            return true;
        else if(numero > conjunto[k])
                 i=k+1;
             else
                  j=k-1;
                  
    k=(i+j)/2;
    System.out.printf("%d\n",i);
    System.out.printf("%d\n",j);
    System.out.printf("%d\n",k);
    
    }
    return false;
}        

} [/code]

[code]public class InterfacePedro{
public static void main(String args[]){
Pedro execute=new Pedro();

    int[] conjunto = {3,8,10,15,18,23,25,27,30,33,34,37};
    int numero=15;
    System.out.println( execute.buscaNumero(numero, conjunto) );
}

}
[/code]

ONDE TA O ERRO???

vlw a ajuda…

Você declarou que i = 0 e j igual ao tamanho do vetor menos 1.

i e j são diferentes, no seu exemplo o laço fica while(0 == 11) vai ser falso e nunca vai entrar.

int i=0;   
int j=conjunto.length-1;

while(i==j) {

}

mais o while não é q ele vai fica fazendo o loop até chegar a está condição???

huumm agora entendi…while é enquanto ela for verdadeira
mudei pra i!=j e deu certo…
vlw ai

Acho que vc confundiu com o do-while, que ele entra pelo menos uma vez… :slight_smile:

[google]do while java[/google]
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/while.html