Busca Binaria em Java

Estamos com problema no while

package Busca;

public class BuscaBinaria {
public static void main(String[] args) {

    Pessoa[] pessoas = new Pessoa[5];
    //Vetor em ordem crescente
    pessoas[0] = new Pessoa(1,"Baby Sauro");
    pessoas[1] = new Pessoa(2, "Charlene Sauro");
    pessoas[2] = new Pessoa(3, "Dino Sauro");
    pessoas[3] = new Pessoa(4, "Fran Sauro");
    pessoas[4] = new Pessoa(5, "Robert Sauro");
    
    //onde o se encontra o indice desejado verificando se o numero 4 
    //encontra-se no vetor desejado
Pessoa pessoa = binario(pessoas, 4);
    if (pessoa != null) {

        System.out.println(pessoa.codigo+ " " + pessoa.nome);
    }else {
        System.out.println("Não Achou!");
    }
}
  public static Pessoa binario(Pessoa[] vetor, int codigoBinario) {
    //variavel meio
    int meio;
    //variavel inicio e fim
    int inicio, fim;
    //variavel contendo  o inicio de contagem do vetor
    inicio = 0;
    //o tamanho do vetor -1
    fim = vetor.length-1;
    
    //processamento onde menor igual a fim faz
    while (inicio <= fim){
        // para descobrir o meio do vetor, incio mais fim dividivo por 2 
        meio = (inicio + fim) /2;
        //se o objeto pessoa no indice meio for igual pessoas que estou procurando devolvo o meio
        if (Pessoa[] == pessoas)
            return meio;
        // se o elemento do meio for menor que pessoas procurada do meio para frente
        else if (Pessoa[meio] < pessoas) inicio = meio + 1;
        // se não elemento do meior for maior que peessoas procurada do meio para tras
        else if (Pessoa[meio] > pessoas) fim = meio - 1;
    }
        return 0;
    }

E qual problema está tendo? É mais fácil você dizer do que a gente ter o trabalho de executar e descobrir.

Obs: você colocou Javascript no título, mas seu código é Java.

Abraço.

1 curtida

Acho que é

if (vetor[meio].getCodigoBinario() == codigoBinario)
   return vetor[meio];

Os outros “ifs” também:

else if (vetor[meio].getCodigoBinario() < codigoBinario)

também não tem “return 0;”

Eu não sei converter isso para JavaScript!

o problema é no while

Se vc postou o código completo, sem faltar nada, então o problema do while é que falta um } no final do código.

Não sei o que é pior o cara retornar inteiro em um objeto do tipo pessoa ou o outro falando que falta chave do bloco de código,
aqui está um solução simples do seu problema

package com.gleisonmv.bitcrypto.crypto;

class Pessoa {

	public int codigo;
	public String nome;

	public Pessoa(int codigo, String nome) {
		this.codigo = codigo;
		this.nome = nome;

	}
}

public class Teste {

	public static void main(String[] args) {

		Pessoa[] pessoas = new Pessoa[5];
		
		// Vetor em ordem crescente
		pessoas[0] = new Pessoa(1, "Baby Sauro");
		pessoas[1] = new Pessoa(2, "Charlene Sauro");
		pessoas[2] = new Pessoa(3, "Dino Sauro");
		pessoas[3] = new Pessoa(4, "Fran Sauro");
		pessoas[4] = new Pessoa(5, "Robert Sauro");

		// onde o se encontra o indice desejado verificando se o numero 4
		// encontra-se no vetor desejado
		Pessoa pessoa = binario(pessoas, 4);
		
		if (pessoa != null) {

			System.out.println(pessoa.codigo + " " + pessoa.nome);
			
		} else {
			
			System.out.println("Não Achou!");
		}
	}

	public static Pessoa binario(Pessoa[] vetor, int codigoBinario) {
		
		// Percorre o pessoal
		for(Pessoa pessoa: vetor) {
			
			// compara o elemento codigo da pessoa com o codigo binario
			if(pessoa.codigo == codigoBinario) {
				
				// Retorna a pessoa pelo codigo
				return pessoa;
			}
		}
		
		// Não pessoa com o codigo retorna null
		return null;
	}
}

Quando compilei aquele código, apareceu o seguinte erro:

/tmp/java_k8pxdY/BuscaBinaria.java:36: error: '.class' expected
        if (Pessoa[] == pessoas)
                     ^
/tmp/java_k8pxdY/BuscaBinaria.java:44: error: reached end of file while parsing
    }
     ^
2 erros

Só posso indicar o problema e sugerir correções, prefiro não fazer o exercício dos outros.

Já foi sugerido que corrigisse os retornos e as comparações dos ifs, mas se @Jhonatas_Oliveira insiste que o problema é outro, então não eu saberia dizer o que mais seria.

1 curtida