Metodo de busqueda

Estoy realizando una búsqueda a través del método binario ya hice uno con una bandera y me anda perfecto pero quisiera saber si alguien puede compilar mi método y ver donde esta el error junto conmigo ya que en ocasiones me sale un error de fuera de indice.
public class Busqueda_Binaria {
int vector[];
int n;
public void principal()
{
Scanner f = new Scanner(System.in);
llenarMatriz();
ordenacionBurbujaIntercambio();
System.out.println("\nMatriz ordenada");
imprimirMatriz();
System.out.println("\nQue elemento está buscando: ");
int s = f.nextInt();
Busqueda_Binaria(s);
}
private void llenarMatriz()
{
Scanner entrada = new Scanner(System.in);
System.out.print("Cuantos elemento va a introducir: ");
n = entrada.nextInt();
vector = new int[n];
for(int i = 0; i < vector.length; i = i + 1)
{
System.out.println("Intoduzca valor " + i + ": ");
int p = entrada.nextInt();
vector = p;
}
}
private void ordenacionBurbujaIntercambio()
{
int aux = 0;
for(int i = 0; i < vector.length - 1; i = i + 1)
for(int j = 0; j < vector.length - 1; j = j + 1)
{
if (vector[j] > vector[j + 1])
{
// intercambiar
aux = vector[j];
vector[j] = vector[j + 1];
vector[j + 1] = aux;
}
}
}
private void imprimirMatriz()
{
for(int i = 0; i < vector.length; i = i + 1)
System.out.println(vector);
}
Este es el método, en negrita es donde me sale algunas veces la línea de error.
private void Busqueda_Binaria(int x)
{
System.out.println("\nElemento buscado por Búsqueda Binaria");
int bajo = 0;
int alto = vector.length;
int central = (int) ((bajo + alto) / 2);
while((bajo < alto) && (vector[central] != x))
{
if (x < vector[central])
alto = central - 1;
else
bajo = central + 1;
central = (int) ((bajo + alto ) / 2);
}
if(x == vector[central])
System.out.println("Valor encontrado en " + central);
else
System.out.println("Valor no encontrado");
}
Aclaro que desde el main llamo con la referencia al método principal,

1 respuesta

Respuesta
1
Me intriga este código.
private void Busqueda_Binaria(int x)
{
System.out.println("\nElemento buscado por Búsqueda Binaria");
int bajo = 0;
int alto = vector.length;
int central = (int) ((bajo + alto) / 2);
while((bajo < alto) && (vector[central] != x)) { //el while empieza aqui
if (x < vector[central]) alto = central - 1;
else bajo = central + 1;
central = (int) ((bajo + alto ) / 2);
} //el while termina aqui
if(x == vector[central]) // esto no deberia esta adentro del while ?
System.out.println("Valor encontrado en " + central);
else
System.out.println("Valor no encontrado");
}
_________________________
Dime exactamente que valores para que te salga el error, ya que yo he probado tu código ya unas 10 veces y aun no me genera ningún error, con esa igualdad que te digo, dentro i fuera del while y no me ha generado ningún error.
¿Podrías indicarme por favor que datos ingresas para que te genere un error?
Hola experto como siempre gracias por tu respuesta, lo he probado con corrección y me sigue saliendo fuera de indice.
Al corregir el método como tu me lo planteas me quedo:
private void Busqueda_Binaria(int x)
{
System.out.println("\nElemento buscado por Búsqueda Binaria");
int bajo = 0;
int alto = vector.length;
int central = (int) ((bajo + alto) / 2);
while((bajo < alto) && (vector[central] != x))
{
if (x < vector[central])
alto = central - 1;
else
bajo = central + 1;
central = (int) ((bajo + alto ) / 2);
if(x == vector[central])
System.out.println("Valor encontrado en " + central);
else
System.out.println("Valor no encontrado");
}
}
Y cuando agrego valores y busco uno que no se encuentra me sale fuera de indice. Coloco lo que realizo en pantalla:
Cuantos elemento va a introducir:
8
Introduzca valor 0:
80
Introduzca valor 1:
70
Introduzca valor 2:
60
Introduzca valor 3:
50
Introduzca valor 4:
40
Introduzca valor 5:
30
Introduzca valor 6:
20
Introduzca valor 7:
10
Matriz ordenada
10
20
30
40
50
60
70
80
Que elemento está buscando:
90
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
Elemento buscado por Búsqueda Binaria
Valor no encontrado
at binaria.Busqueda_Binaria.Busqueda_Binaria(Busqueda_Binaria.java:83)
at binaria.Busqueda_Binaria.principal(Busqueda_Binaria.java:26)
at binaria.Main.main(Main.java:20)
Valor no encontrado
Java Result: 1
BUILD SUCCESSFUL (total time: 20 seconds)
Desde ya muchas gracias experto por tu ayuda y que te encuentres muy bien saludos!
Disculpa que no te haya respondido antes, me entretuve editando un logo para mi proyecto y olvide tu consulta je je
Bueno el método de búsqueda binaria quedaría así
private void Busqueda_Binaria(int x) {
System.out.println("\nElemento buscado por Búsqueda Binaria");
int bajo = 0;
int alto = vector.length;
int central = (int) ((bajo + alto) / 2);
boolean no_se_encontro = false;
while ((bajo < alto) && (vector[central] != x)) {
System.out.println("Recorrido numero: " + cont);
if (x < vector[central]) {
alto = central - 1;
} else {
bajo = central + 1;
}
central = (int) ((bajo + alto) / 2);
System.out.println("Alto: " + alto + ", Bajo: " + bajo + ", Central: " + central);
cont++;
if (central ==alto) {
no_se_encontro = true;
break;
}
}
if (no_se_encontro == true) {
System.out.println("Valor no encontrado");
} else {
System.out.println("Valor encontrado en " + central);
}
}
}
_____________________________
Ahora ya no sale ese error y de paso te dice si lo encontró o no lo encontró, era un error en el central, ya te darás cuenta cuando pruebes el código y veas los comentarios, como es el ciclo de los valores y ahí te darás cuenta.
Tip: Salia ese error porque si un vector tiene como length 8, solo tiene indices del 1 al 7 con el 8 sale error, por eso salia, pero ya lo arregle.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas