[RESOLVIDO] Metodo de busca Binaria!

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:

[code]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;

}

}[/code]

Classe executável:

[code]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 *** ");


}

}[/code]

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… :smiley:

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

[code]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;   

}   

} [/code]

E declare seu array assim:

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

Testa aí e vê se é isso. Vlw

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!

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

Desculpe mustang, mas nao entendi a logica!

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

Obrigado.

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

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!

Descobri.

[code]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;     
 
}     

}[/code]

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

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

Putzzz…

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

Abraço.
Obrigado :smiley:

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

Vlw.