Autor Tema: CU00666B Ejemplo for extendido bucles for each en Java ventajas e inconvenientes  (Leído 3628 veces)

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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

Código: [Seleccionar]
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

Código: [Seleccionar]
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)

Código: [Seleccionar]
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
}
« Última modificación: 27 de Marzo 2015, 08:27 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
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

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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.

Código: [Seleccionar]
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
}


« Última modificación: 26 de Marzo 2015, 23:31 por Lorenzo31 »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".