Buenas noches, Ipeiro61.
Primero que nada, quería decirte que has cumplido con el cometido del ejercicio de la entrega CU00665B del curso Java desde cero.
Dicho esto, me gustaría comentarte varias cositas sobre los dos códigos.
En el código "ListaCantantesFamosos", en el método "addCantantes()" no hace falta que pases dos parámetros, dado que los dos contendrán información relacionado a un mismo atributo. Aunque el ejercicio pida que se entren dos cantantes, no hace falta pasarle dos parámetros, simplemente tienes que invocar dos veces el mismo método. ¿Y si fueran 50 cantantes los que tenías que ingresar?
En programación prima la economía y la reutilización de los códigos, así que, algo que podríamos hacer con una instrucción no hace falta que lo hagamos con dos.
Por lo tanto, el código de la clase "ListaCantantesFamosos" quedaría "mejor" así:
import java.util.ArrayList;
public class ListaCantantesFamosos
{
private String nombreLista;
private ArrayList<String> listaCantantes;
public ListaCantantesFamosos(String nombre)
{
nombreLista = nombre;
listaCantantes = new ArrayList<String>();
listaCantantes.add("Sting");
listaCantantes.add("Bob Dylan");
listaCantantes.add("Loquillo");
}
public void addCantantes(String cantante)
{
listaCantantes.add(cantante);
}
public void getCantante(int posicion)
{
System.out.println(listaCantantes.get(posicion));
}
public int getTamanyo()
{
return listaCantantes.size();
}
}
En el código "TestListaCantantes" te podrías ahorrar declarar las dos variables "primerCantante" y "segundoCantante" haciéndolo de la siguiente forma:
import java.util.Scanner;
public class TestListaCantantes
{
public static void main(String[] args)
{
ListaCantantesFamosos1 lista = new ListaCantantesFamosos("Cantantes Famosos");
String cantante;
System.out.println("Introduce el primer cantante...");
Scanner entrada = new Scanner(System.in);
cantante = entrada.nextLine();
lista.addCantantes(cantante); //Añadimos el primer cantante en la lista invocando el método "addCantantes()"
System.out.println("Introduce el segundo cantante...");
cantante = entrada.nextLine(); //Reutilizamos la variable cantante
lista.addCantantes(cantante); //Añadimos el segundo cantante en la lista invocando el método "addCantentes()"
System.out.println("\nLos cantantes son: ");
int tamanyo = lista.getTamanyo();
for(int i=0; i <tamanyo; i++)
{
lista.getCantante(i);
}
}
}
En relación con la consulta que haces al final de tu hilo, decirte que podrías modificar el valor de la variable "nombre" de un objeto "ListaCantentesFamosos" si tuvieras este:
public void setNombre(String nombre){
nombreLista = nombre;
}
método en la clase "ListaCantantesFamosos" e invocarlo posteriorme en la clase "TestListaCantantes" así:
lista.setNombre("aquiEscribesElNuevoValor");
Pero da la manera que tienes el constuctor de la clase "ListaCantantesFamosos" basta con pasarle como parámetro cualquier valor(nombre) que quieras para el atributo "nombreLista" y se te creará el objeto conteniendo dicho valor.
De todas maneras te recomiendo la lectura de:
https://www.aprenderaprogramar.com/foros/index.php?topic=1549.msg8169#msg8169clasificado como un "ejercicio ejemplo".
Saludos.