Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 26 de Marzo 2015, 18:03
-
Buenas aquí va la solución de mi ejercicio.
Tengo una pregunta que igual es una tonteria, dentro de los métodos, las variables que se creas solo para el metodo no debe indicarse que son private, public, etc... (lo intenté y me dió error) entiendo porque ya declaramos como public el propio metodo o private.?
Clase ListaCantantesFamosos
import java.util.ArrayList;
public class ListaCantantesFamosos{
private ArrayList<String> listado = new ArrayList<String>(); //creado Arraylist listado
public ListaCantantesFamosos(){ //constructor sin parametros
// añado 3 Strings a listado
listado.add("Sean Paul"); listado.add("Bonney M"); listado.add("Michael Jackson");
}
public void añadirCantante(String nombre){ listado.add(nombre); } //método para añadir nombres
public void imprimirCantantes(){
for(String nombre: listado){ System.out.println(nombre); }
} //método imprimir lista con bucle for extendido
}
Clase RecogerDatos
import java.util.Scanner;
import java.util.InputMismatchException;
public class RecogerDatos{
public RecogerDatos(){ /*vacio*/ }
public int recogerNumero(){ //recojo datos numéricos
boolean semaforo = false;
int numero=0;
while(semaforo == false){
Scanner escaner = new Scanner(System.in);
try {
numero = escaner.nextInt();
switch(numero){ // solo se permite introducir el 1,2 o 3 para lo demas vuelve a pedir valor
case 1:
case 2:
case 3: { semaforo = true; break; }
default: { System.out.println("Solo números 1,2 o 3 son válidos"); }
}
} catch (InputMismatchException e){ System.out.println("Solo números 1,2 o 3 son válidos"); }
}
return numero;
} //final del método recogerNumeros
public String recogerNombre(){ //recojo datos String
String nombre;
do{
System.out.print ("\n Introduzca el nombre del nuevo cantante \n");
Scanner escaner = new Scanner(System.in);
nombre = escaner.nextLine();
}while(nombre.length() < 1); //no he sido capaz esta vez que con (nombre == "") pidiera de nuevo datos
return nombre;
}
}
Clase GestorLista (Main)
public class GestorLista{
public static void main(String[] args){
boolean semaforo = false;
ListaCantantesFamosos lista = new ListaCantantesFamosos(); //creamos nuevo Objeto ListaCantantesFamosos
lista.imprimirCantantes();
System.out.println(" \n Estos son los cantantes actuales de la Lista de Cantantes Famosos \n");
while (semaforo == false){
System.out.println("\n Elige que operacion deseas realizar indicando el número: \n\n 1.- Añadir nuevo cantante \n 2.- Mostrar lista cantantes \n 3.- Salir \n");
RecogerDatos entrada = new RecogerDatos();
switch(entrada.recogerNumero() ){
case 1: { lista.añadirCantante(entrada.recogerNombre()); break; }
case 2: { lista.imprimirCantantes(); break; }
case 3: { semaforo = true; break;}
} // final switch
} //final while
} // final main
}
-
Hola Lorenzo
Respondiendo a tu pregunta.
Los parámetros que reciben los métodos no necesitan modificador de acceso (public o private) pues el acceso a estos parámetros es exclusivo para el propio método y desaparecen al terminar su ejecución
Tu ejercicio está muy bien
Alabo tu imaginación a la hora de codificar la clase para escanear datos de teclado.
Pero quiero comentarte una cosa. Has de pensar en crear clases que no cambien de un proyecto/ejercicio a otro. Has de tener clases que te sirvan para cualquier ocasión.
Estoy pensando en la clase que se encarga de recibir los datos tecleados por el usuario.
La subdivisión de los proyectos en diversas clases, permite afrontar los nuevos proyectos aprovechando clases existentes de propósito general ya probadas.
En el enunciado de este ejercicio se pedía una cosa que no has cumplido.
Se pedía. Al empezar, presentar la lista (cosa que tú has hecho), luego pedir un nuevo cantante, presentar los datos y finalmente dar la opción a introducir más cantantes o terminar la ejecución.
Se que esa petición no debe ser problema para tí, pero si tienes alguna pregunta, aquí nos tienes.
Saludos
-
Buenas Toni, como siempre gracias.
Imaginaba que lo de public o private venía dado por el método, ya me lo confirmas y me quito la duda.
Sobre clases reutilizables, de momento intento hacerlo todo de nuevo, para practicar y por eso quizá cambian de un ejercicio a otro.
Lo de pedir añadir nuevo yo quise hacer un menu, donde se pueden añadir tantos como quieran, pero si que es cierto, que se pedía añadir uno sí o sí y mi código no lo contempla, permite salirse sin añadir, lo retocaré para cumplir lo solicitado.
Gracias Toni tus comentarios de apoyo me animan a seguir.
MODIFICO, aquí va la clase Gestor que obliga a añadir mínimo un cantante para poder salir de la aplicación. Gracias, en el futuro respetaré primero lo que pide exactamente. Al final es lo capital.
public class GestorLista{
public static void main(String[] args){
boolean añadirNombre = false; //boolean que asegura que se ha añadido un cantante mínimo.
boolean semaforo = false;
ListaCantantesFamosos lista = new ListaCantantesFamosos(); //creamos nuevo Objeto ListaCantantesFamosos
lista.imprimirCantantes();
System.out.println(" \n Estos son los cantantes actuales de la Lista de Cantantes Famosos \n");
while (semaforo == false){
System.out.println("\n Elige que operacion deseas realizar indicando el número: \n\n 1.- Añadir nuevo cantante \n 2.- Mostrar lista cantantes \n 3.- Salir \n");
RecogerDatos entrada = new RecogerDatos();
switch(entrada.recogerNumero() ){
case 1: { lista.añadirCantante(entrada.recogerNombre()); añadirNombre = true; break; }
case 2: { lista.imprimirCantantes(); break; }
case 3: { if(añadirNombre == true){ semaforo = true; break;}else { System.out.println("Debes añadir por lo menos un nuevo cantante para poder salir"); } }
} //final switch
} // final while
} //final main
}
-
Hola Lorenzo
Si, es cierto que tu versión con menú es más versatil.
Y veo que has sabido adaptarte a la nueva situación. añadirNombre == true
Mis felicitaciones.
Saludos