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: Juanfran.ib en 27 de Julio 2023, 18:07
-
Dejo aquí mi solución a este ejercicio.
He usado la clase EntradaDeTeclado:
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado
public class EntradaDeTeclado {
private String entradaTeclado; //Variable de instancia (campo) de la clase
public EntradaDeTeclado () { //Constructor
entradaTeclado="";
pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
} //Cierre del constructor
public void pedirEntrada () { //Método de la clase
Scanner entradaEscaner = new Scanner (System.in);
entradaTeclado = entradaEscaner.nextLine (); } //Cierre del método pedirEntrada
public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada
public String getPrimeraPalabra () {
for (int i=0; i < entradaTeclado.length() - 1; i++) {
if (entradaTeclado.substring (i, i+1).equals(" ") ) { //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
return entradaTeclado.substring(0, i+1); }
}
return entradaTeclado; //Caso de que no se detecte ningún espacio devolvemos lo que haya
} //Cierre del método getPrimeraPalabra
public int getLongitud () { //Método de la clase
return entradaTeclado.length();
} //Cierre del método getLongitud
} //Cierre de la clase
El código de la clase ListaCantantesFamosos:
import java.util.ArrayList;
//Esta clase representa una lista de nombres manejada con la clase ArrayList de Java
public class ListaCantantesFamosos {
private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
private ArrayList<String> listaDeCantantes; //Declaramos un ArrayList que contiene objetos String
public ListaCantantesFamosos (String nombre){ //Constructor: crea una lista de nombres vacía
String nombreDeLaLista = nombre;
listaDeCantantes = new ArrayList<String>(); //Creamos el objeto de tipo ArrayList
listaDeCantantes.add ("Julio Iglesias");
listaDeCantantes.add ("Paco Ibáñez");
listaDeCantantes.add ("Luis Guerra");
} //Cierre del constructor
public void addCantante (String nuevoCantante) { listaDeCantantes.add (nuevoCantante); } //Cierre del método
public String getCantante (int posicion) { //Método
if (posicion >= 0 && posicion < listaDeCantantes.size() ) {
return listaDeCantantes.get(posicion); }
else { return "No existe cantante para la posición solicitada";}
} //Cierre del método
public int getTamaño () { return listaDeCantantes.size(); } //Cierre del método
public void removeCantante (int posicion) { //Método
if (posicion >= 0 && posicion < listaDeCantantes.size() ) {
listaDeCantantes.remove(posicion); }
else { } //else vacío. No existe nombre para la posición solicitada, no se ejecuta ninguna instrucción
} //Cierre del método removeNombre
} //Cierre de la clase
Y finalmente adjunto el main
public class TestListaCantantesFamosos {
public static void main (String [ ] args) {
System.out.println ("Empezamos el programa");
System.out.println ("Por favor introduzca el nombre de un cantante famoso a añadir en la lista:"); EntradaDeTeclado entrada1 = new EntradaDeTeclado();
System.out.println ("Por favor introduzca el nombre de otro cantante famoso a añadir a la lista:"); EntradaDeTeclado entrada2 = new EntradaDeTeclado();
System.out.println ("Gracias, estos dos nombres de cantantes famosos se van a añadir a la lista de Cantantes Famosos");
ListaCantantesFamosos lista1 = new ListaCantantesFamosos("Cantantes Famosos");
lista1.addCantante (entrada1.getEntrada() );
lista1.addCantante (entrada2.getEntrada() );
System.out.println ("La lista ha quedado formada por " + lista1.getTamaño() + " elementos");
int j = lista1.getTamaño();
int i=0;
while (j>0){System.out.println ("Elemento "+ (i+1) +" : " + lista1.getCantante(i) );
i+=1;
j-=1;
}
}
Gracias por vuestros comentarios.
-
Hola, solo dos detalles de poca importancia:
1- En el código, mejor evitar siempre usar la letra ñ, así como otros caracteres que
sean ajenos al alfabeto inglés.
public int getTamaño () { return listaDeCantantes.size(); }
Esto es porque, aunque a nosotros nos funcione, puede haber problemas al compartir nuestro código con otros programadores de otros países cuyos sistemas operativos y programas de edición no contengan una tabla de caracteres que reconozca símbolos latinos como la ñ, las vocales con tilde, vocales con diéresis, las aperturas de interrogación y exclamación(anglosajones solo usan los cierres), etc...
Como digo, es una recomendación, no una obligación. Fastidia un poco, porque entonces hay que escribir "mal" estos nombres.
Se puede usar simplemente la letra n:
public int getTamano () { return listaDeCantantes.size(); }
Pero hay otras formas que se usan habitualmente: tamanio, tamanyo, tamanho,...
Sobre todo vamos a querer usarlas cuando la palabra es "año", porque si solo usamos la n..., emmm.., pues no es elegante :o
2- Otra recomendación, no obligación.
Si un else va a quedar vacío, pues simplemente no se pone ningún else y ya está.
Si lo creemos necesario, podemos añadir el comentario explicando que en caso de no cumplirse la condición anterior entonces no va a ocurrir nada.
Pero no es necesario incluir un else vacío.
public void removeCantante (int posicion) { //Método
if (posicion >= 0 && posicion < listaDeCantantes.size() ) {
listaDeCantantes.remove(posicion); }
else { } //else vacío. No existe nombre para la posición solicitada, no se ejecuta ninguna instrucción
}