Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: diegoxd7 en 18 de Junio 2017, 04:09

Título: Proyecto Java Búsqueda de objetos en ArrayList determinar coincidencia nombre
Publicado por: diegoxd7 en 18 de Junio 2017, 04:09
Buenas quería pedirles ayuda en mi proyecto. Es un catalogo con componentes electrónicos y en una parte del código se puede buscar por nombre pero solo me aparece el primero ya trate de todo pero no puedo hacer que me muestre los demás. En el link de abajo esta el programa en java creado con bluej. Perdón por el código precario es que aun estoy aprendiendo el lenguaje.
https://www.dropbox.com/s/qyaeo3yu8vtczw9/catalogo%2012.0.zip?dl=0
Título: Re:Búsqueda de objetos en un arraylist
Publicado por: Kabuto en 18 de Junio 2017, 13:33
Hola,

tu método para buscar por nombre es este:
Código: [Seleccionar]
public void buscarPorNombre(String nombre){
       Componente encontrado = null;
       for(Componente actual : componentes){
           if(actual.getNombre().equals(nombre)){
               encontrado = actual;
               break;
           }
       }
            if(encontrado != null){
                encontrado.darDatos();
            } else {
                System.out.println("no se encontro al Componente");
            }
       
    }

Efectivamente, ese código solo te permite mostrar información de un único elemento, el primero que se encuentre.

Una posible solución para mostrar la información de todos los elementos que coincicidan con el nombre de la búsqueda, podría ser evitar detener el bucle con el break.
Y lo que hacemos dentro del bucle es mostrar directamente la información de todos los componentes que coincidan con el nombre indicado.

Podría ocurrir que ninguno coincidiese, en cuyo caso sería necesario informar por pantalla.
Para controlar si hemos encontrado coincidiencias o no, podemos servirnos de una variable booleana.

Por ejemplo:
Código: [Seleccionar]
public void buscarPorNombre(String nombre)
{
boolean encontrado = false;//Si hallamos alguna coincidencia, su valor cambiará a true

//Buscamos componentes que coincidan con el nombre indicado
for(Componente actual : componentes)
{
                    if(actual.getNombre().equals(nombre))
     {
                           actual.darDatos();
   encontrado = true;
     }
}

/*
* Busqueda finalizada.
* Si se han encontrado coincidencias, los datos de los componentes que
* coinciden habrán salido por pantalla.
* Si no se ha encontrado coincidencia ninguna, no habrá salido ninguna informacion
* en pantalla y sería conveniente informar de que no han habido coincidencias.
* Para saber si tenemos que informar o no, basta con consultar el valor de
* la variable "encontrado", si es false, debemos informar
*/

if (!encontrado)
System.out.println("No se encontraron componentes con el nombre: " + nombre);
}