Hola, esta es mi solución para este ejercicio del curso de java.
He utilizado tres clases, la clase ListaCantantesFamosos:
import java.util.ArrayList;
public class ListaCantantesFamosos
{
private ArrayList<String>nombresCantantes; //declaramos un objeto de tipo ArrayList
private String nombreLista; //siempre hay que crear el objeto que contiene el nombre del array que creamos.
//constructor
public ListaCantantesFamosos(String nombre){ //al llamar al constructor nos pedira que introduzcamos el nombre de la lista
nombreLista=nombre;
nombresCantantes=new ArrayList<String>();
nombresCantantes.add("Madona");// con el constructor, añadimos directamente 3 nombres a la lista
nombresCantantes.add("Queen");
nombresCantantes.add("Bon Jovi");
}
public void addNombre(String newNombre){//metodo para añadir nombres a la lista
nombresCantantes.add(newNombre);
}
public String getNombre(int posicion){//metodo para obtener un nombre de la lista, segun su indicie
if(posicion>=0 && posicion<nombresCantantes.size()){
return nombresCantantes.get(posicion);
}else{
return "No existe nombre para la posición solicitada";
}
}
public int getTamaño(){//metodo para obtener el tamaño de la lista
return nombresCantantes.size();
}
public void removeNombreLista(int posicion){//metodo para borrar un nombre de la lista
if (posicion>=0 && posicion<nombresCantantes.size()){
nombresCantantes.remove(posicion);
}else{} //no exite nombre para la posicion solicitada. No se ejecuta ninguna instruccion
}
}
La clase que contiene el main, TextListaCantantes:
import java.util.Scanner;
public class TextListaCantantes
{
public static void main (String[]args){
int x;
System.out.println("¿Cuantos nombres vas a introducir?");
Scanner sc=new Scanner(System.in);// se crea un objeto de tipo Scanner
x=sc.nextInt();//nextInt(): metodo para leer un entero con la clase Scanner. Se lee el entero de cuantos nombres se van a introducir
sc.nextLine();//limpiar bufer de entrada. SIEMPRE acontinuación de leer datos numericos y despues se tenga que leer datos de tipo caracter.
ListaCantantesFamosos lista=new ListaCantantesFamosos("Cantantes");// se crea un objeto de tipo Array(String)(ListaCantantesFamosos)
for(int i=0;i<x;i++){
System.out.println("Por favor, introduzca nombre de cantante");
EntradaDeTeclado entrada=new EntradaDeTeclado(); //Se crea un objeto tipo EntradaTeclado. Se utiliza la clase EntradaDeTeclado.
lista.addNombre(entrada.getEntrada());//addNombre():metodo de la clase ListaCantantesFamosos para añadir un nombre a la lista
}
System.out.println("La lista ha quedado formada por:");
for(int i=0;i<lista.getTamaño();i++){
System.out.println(lista.getNombre(i));
}
}
}
Y la clase que ya utilizamos en otro ejercicio, EntradaDeTeclado:
import java.util.Scanner;
public class EntradaDeTeclado
{
private String entradaTeclado; //variable de instancia(campo) de la clase
public EntradaDeTeclado(){ //constructor
entradaTeclado=""; //inicializamos la instancia de la clase
pedirEntrada(); // Esto es una llamada a un método interno. Al crear un objeto automaticamente, ejecutamos el metodo
}
public void pedirEntrada(){ //metodo de la clase
Scanner entradaEscaner=new Scanner(System.in);
entradaTeclado=entradaEscaner.nextLine();
}
public String getEntrada(){
return entradaTeclado;
}
//en esta prueba no se utilizan estos metodos
public String getPrimeraPalabra(){
for(int i=0;i<entradaTeclado.length()-1;i++){
if(entradaTeclado.substring(i,i+1).equals(" ")){
return entradaTeclado.substring(0,i+1);
}
}
return entradaTeclado; //en el caso de que no se detecte ningun espacio, devolvemos lo que haya
}
public int getLongitud(){
return entradaTeclado.length();
}
}
Un saludo.