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