[RESOLVIDO] Metodo de busca Binaria!

10 respostas
manolo

Boa tarde galera!

Pessoal estou desenvolvendo um "sisteminha", no qual eu tenho dois métodos de busca, (binário e linear).
Só que está ocorrendo um problema no método de busca linear, que não consigo resolver nem fu*$#!

Segue abaixo a classe de busca binaria:

public class BuscaBinaria {
	
	public static boolean Binaria(int x, int dados[]){
		
		int n = dados.length;
		int aux = 0;
		
		for(int i = 0; i < n; i++){// Ordena o vetor em forma crescente
			for(int j = 0; i < n; j++){
				if(dados[i] <= dados[j]){//Problema aqui!!!
					aux = dados[j];
					dados[j] = dados[i];
					dados[i] = aux;
				}
			}
		}
		
		int meio;
		int inicio = 0;
		int fim = dados.length-1;
		while (inicio <= fim) {
		         meio = (inicio + fim)/2;
		         if (x == dados[meio])
		                  return true;
		         if (x < dados[meio])
		                  fim = meio - 1;
		         else
		                  inicio = meio + 1;
		}
		return false;

	}

}

Classe executável:

import java.util.*;
public class Ex1Binario {

	public static void main(String[] args) {
		
		int vet[];
		vet = new int[9];
		
		int elemento;
		
		Scanner input =  new Scanner(System.in);
		
		
		for ( int i = 0; i< vet.length; i++){
			System.out.println(" Informe o elemento " + (i+1) + " para o array: ");
			vet[i] = input.nextInt();
			
		}
		
		System.out.println(" Informe um elemento para busca: ");
		elemento = input.nextInt();
		
		BuscaLinear.Linear(elemento, vet);
		BuscaBinaria.Binaria(elemento, vet);
		
		if(BuscaLinear.Linear(elemento, vet) == true)
			System.out.println(" *** O numero foi achado no metodo linear *** ");
		else
			System.out.println(" *** O numero nao foi achado no metodo linear *** ");
		
		if(BuscaBinaria.Binaria(elemento, vet) == true)
			System.out.println(" *** O numero foi achado no metodo binario *** ");
		else
			System.out.println(" *** O numero nao foi achado no metodo binario *** ");

	
	}

}

O erro que esta ta dando e esse:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
	at BuscaBinaria.Binaria(BuscaBinaria.java:11)
	at Ex1Binario.main(Ex1Binario.java:24)

O que pode ser galera? Sera que meu método de ordenação esta errado?

Obrigado.. :D

10 Respostas

Frantic_Avenger

Desculpe mas não posso executar seu código no momento mas eu faria minha ordenação desse jeito (vê se não é esse o erro).

public class BuscaBinaria {   
       
    public static boolean Binaria(int x, int dados[]){   
           
        int n = dados.length;   
        int aux = 0;   
           
        for(int i = 0; i < n-1; i++){
            for(int j = i+1 ; i < n; j++){   
                if(dados[i] > dados[j]){ 
                    aux = dados[j];   
                    dados[j] = dados[i];   
                    dados[i] = aux;   
                }   
            }   
        }   
           
        int meio;   
        int inicio = 0;   
        int fim = dados.length-1;   
        while (inicio <= fim) {   
                 meio = (inicio + fim)/2;   
                 if (x == dados[meio])   
                          return true;   
                 if (x < dados[meio])   
                          fim = meio - 1;   
                 else   
                          inicio = meio + 1;   
        }   
        return false;   
  
    }   
  
}

E declare seu array assim:

int[] vet;   
vet = new int[9];

Testa aí e vê se é isso. Vlw

manolo

Olá, Frantic!

Obrigado pela sugestão, mas infelizmente não funcionou. O mais engraçado que no algoritmo que eu fiz, funcionou perfeitamente a estrutura!

M

Ordenacao:

for(int i=0;i<++).length;i++){
	for(int j=i+1;j<vetor.length;j++){
		if(vetor[i]>vetor[j]){
			int aux = [i];
			vetor[i] = vetor[j];
			vetor[j] = aux;
		}
       }
}
manolo

Desculpe mustang, mas nao entendi a logica!

# for(int i=0;i<++).length;i++){

Obrigado.

W

Vetor de inteiros de nove posições, ou seja, de 0 à 8

int  vet[];  
         vet = new int[9];

Seu laço

for  ( int i = 0; i< vet.length; i++){  
             System.out.println(" Informe o elemento " + (i+1) + " para o array: ");  
             vet[i] = input.nextInt();  
               
         }

vet.length é igual a 9, o que vai acontecer quando ele passar pela iteração 9 < 9?
Coloca assim :

for  ( int i = 0; i< vet.length-1; i++){  
             System.out.println(" Informe o elemento " + (i+1) + " para o array: ");  
             vet[i] = input.nextInt();  
               
         }
manolo

Ainda não rolo!

To achando que o erro está aqui:

for(int i = 0; i < n; i++){// Ordena o vetor em forma crescente for(int j = 0; i < n; j++){

Valeu pela ajuda pessoal!

Frantic_Avenger

Descobri.

public class BuscaBinaria {     
         
    public static boolean Binaria(int x, int dados[]){     
             
        int n = dados.length;     
        int aux = 0;     
             
        for(int i = 0; i < n-1; i++){   
            for(int j = i+1 ; j < n; j++){     // Você trocou j por i aqui, estava   for(int j = i+1 ; i < n; j++){     
                if(dados[i] > dados[j]){   
                    aux = dados[j];     
                    dados[j] = dados[i];     
                    dados[i] = aux;     
                }     
            }     
        }     
             
        int meio;     
        int inicio = 0;     
        int fim = dados.length-1;     
        while (inicio <= fim) {     
                 meio = (inicio + fim)/2;     
                 if (x == dados[meio])     
                          return true;     
                 if (x < dados[meio])     
                          fim = meio - 1;     
                 else     
                          inicio = meio + 1;     
        }     
        return false;     
     
    }     
     
}

Dá um OK aí se foi tudo certo. Flw.

W

Num é que é mesmo! rs, jurava q essa p* tava estourando ali ^^, debuga essa parada ai que fica fácil mano

manolo

Putzzz…

Que mancada Frantic! Muito obrigado pela observação, roo certinho!

Abraço.
Obrigado :smiley:

Frantic_Avenger

Pior que só debugando eu descobri isso :lol: nem tinha reparado, então pelo visto o código tá certo.

Vlw.

Criado 18 de junho de 2010
Ultima resposta 18 de jun. de 2010
Respostas 10
Participantes 4