Hola,
tu método para buscar por nombre es este:
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: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);
}