Pregunta

El proyecto de clase que nos ha de leer en el título, artista y letra de 10.514 canciones contenidas en un archivo de texto. La sección actual del proyecto tenía escribamos una lista enlazada desenrollado ordenada y ejecutar una búsqueda en el campo de título. El comparador también fue escrito para ordenar la lista por título. Tenemos que mantener un registro de las comparaciones requeridas para encontrar las coincidencias

Cuando se prueba, estoy consiguiendo algunos resultados extraños. Por ejemplo, ejecutar una búsqueda de
ángel devuelve 23 partidos y requiere 552 comparaciones, que coincide con la respuesta dada por el profesor
t devuelve cero partidos y requiere comparaciones 9530, donde se esperaba que
1148 coincidencias ta devuelve 62 partidos y requiere comparaciones 8455
s los rendimientos no se requerían partidos y 8383 comparaciones
sa retornos 89 partidos y se requieren comparaciones 7355

Mi búsqueda se ejecuta el algoritmo de esta manera:

  1. bucle a través de la lista para encontrar el primer partido
  2. bucle a través de la lista para encontrar el primer caso que no coincide con el campo de búsqueda
  3. enviar los objetos de inicio y fin para el método de lista secundaria de la estructura de datos, lo que coloca a través de esos dos objetos y construye una lista separada de los partidos
  4. lista retorno de partidos

Tanto para el paso uno y dos, que compara el valor actual con el valor de búsqueda a través de
if (currentSong.getTitle().toLowerCase().startsWith(titleSearch))

¿Qué hay en esta línea de código que vuelve falsas con una sola búsqueda carta, pero cuando se añade una A, se encuentran valores? Preferiblemente, me gustaría una solución que no me exigiría a paso manualmente a través de iteraciones 8000 y pico de un bucle en un depurador. Además, el profesor proporciona pruebas de que la estructura con los valores esperados, y mi código pasó todas las pruebas.

¿Fue útil?

Solución

descubrí cuál era el problema. En el método subLista, he usado un método de búsqueda binaria para identificar la ubicación del índice de la primera concordancia. Sin embargo, dado que los rendimientos binarios de búsqueda sólo el primer partido que viene a través, tenía un bucle para caminar hacia atrás a través de la matriz de encontrar el verdadero primer partido.

Sin embargo, en este caso, el primer golpe volvió de búsqueda binaria se encontraba en el índice 0, por lo que cuando caminaba hacia atrás, un ArrayIndexOutOfBoundsException estaba tirado, por tanto, un cortocircuito en toda la cosa. Adición de una segunda prueba resuelto el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top