|
Indice | Temas Recientes | Quién Está en LÃnea | Lista de Usuarios | Mi Perfil | Búsqueda | Ayuda |
![]() |
mvnForum » Listar todos los foros » Foro: Curso PLJ » Tema: Sesion4 Apartado 3.4 |
Total de mensajes en este tema: 4 |
[Eliminar este Tema]
[Mover este Tema] [AÅadir a Mis Favoritos] [AÅadir un aviso a este tema] [Publicar nuevo tema] |
Autor |
|
![]() Extranjero
|
En el programa ArrayDemo3.java cuando busco un elemento en el vector siempre me devuelve negativo. Por ejemplo, si hago: Arrays.binarySearch(vector,valor_encontrar), siendo: vector=10,20,30,0,0,0,0,0,0,0. (10 posiciones) y valor_encontrar=20. Me devuelve -11, como si no lo encontrase y me dijese que el valor deberÃa estar en la posición 11 en caso de encontrarse. Lo curioso es que si el vector lo hago de 6 posiciones O MENOS, funciona perfectamente. Por ejemplo: Arrays.binarySearch(vector,valor_encontrar), siendo: vector=10,20,30,0,0,0. (6 posiciones) y valor_encontrar=20. Me devuelve 1. ![]() ¡¡¿¿Como se explica esto??!! |
||
|
![]() Miembro
|
Primero, no llamemos vectores a los arrays. En Java un Vector es algo muy distinto a un array. Cuando dices que el array tiene 10 posiciones y que tiene los valores {10,20,30,0,0,0..} los ceros ¿qué son? ¿números? ¿o posiciones que no has llenado? En ambos casos puede dar problemas: si son números, entonces el array está mal ordenado, los ceros deberÃan ir al principio. Por otro lado, si son posiciones que no has llenado, no sé si va a funcionar bien el algoritmo de búsqueda binaria. Voy a hacer alguna prueba y te contesto algo. Puedes ir tú también probando algo por tu cuenta. Domingo. |
||
|
![]() Extranjero
|
Ya he solucionado el problema. El fallo estaba en que no tenÃa ordenado el vector. Con razón no funcionaba la busqueda binaria, ![]() Gracias de todos modos. |
||
|
![]() Miembro
|
Ya estoy de vuelta. Ya he hecho algunas pruebas. Copio un programa de ejemplo a continuación: package modulo1.sesion4; Si ejecutas este programa, verás que el valor que devuelve slot es 9. Podemos sacar algunas conclusiones: 1. El array se inicializa a ceros y el algoritmo de ordenación ha puesto los ceros al principio del array. 2. El valor de slot es positivo. Eso es porque la búsqueda binaria ha encontrado el número 20 (slot es négativo sólo si el número no está en el array). IMPORTANTE: fÃjate que slot en el código es el valor que devuelve directamente binarySearch, no es la expresión -(slot +1). Esta expresión sólo se usa cuando el valor devuelto es negativo, en el caso en que el número no está en el array. Y nos dice la posición donde deberÃa ir el número. Por cierto, para probar todo esto, nada mejor que el bean shell. Mira qué fácil es probarlo: bsh % miArray = new int[10]; Por cierto, fijaros si es "inteligente" la búsqueda binaria, que cuando le pedimos que busque el 0, nos devuelve 4, que es la posición del array que deja 4 ceros a la izquierda y 4 ceros a la derecha. ![]() Domingo. |
||
|
[Versión imprimible] [Publicar nuevo tema] |