Ajuda!

4 respostas
P

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:

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;
    }        
}
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) );
    }
}

ONDE TA O ERRO???

vlw a ajuda...

4 Respostas

A

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) {

}
P

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

P

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

CintiaDR

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

Criado 1 de novembro de 2007
Ultima resposta 1 de nov. de 2007
Respostas 4
Participantes 3