Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: hymsoft en 17 de Julio 2016, 00:32

Título: Java evitar que el código sea complejo o repetitivo bucles for each CU00666B
Publicado por: hymsoft en 17 de Julio 2016, 00:32
Buenas!!! me tome algo de tiempo releyendo y acomodando las ideas cuanto a los objetos(que me esta costando bastante...) gracias a las correcciones y consejos dados por Jorge Lopez a mi ejercicio anterior.

Espero no haber cometido los mismos errores en este...

El ejercicio es el CU00666B del curso de Aprenda a programar en Java como si estuviera en primero.

clase de prueba
Código: [Seleccionar]
/**
 * Resolucion del ejercicio CU00666B
 *
 * @author Hugo Segura (hymsoft)
 *
 */
public class TestCU00666B
{
   
   
    public static void main(String[] args){
        //Declaracion de variables
        String entrada1 = "";
        String respuestaUsuario = "";//para evitar confusiones con las entradas por teclado
        EntradaDeTeclado suEntrada = new EntradaDeTeclado();//Objeto para pedir el ingreso por teclado
        EntradaDeTeclado suRespuesta = new EntradaDeTeclado();
        int i = 0;//auxiliar contador
        boolean sigueCargando = true;
        boolean imprimirdenuevo = false;
       
        System.out.println("Empecemos el programa...\n\nCantantes por defecto\n");
        //Consigna 1 - Inicializo el objeto ListaCantantesFamosos y muestro los cantates por pantalla
        ListaCantantesFamosos miLista = new ListaCantantesFamosos();//objeto que guarda la lista de cantantes famosos
        miLista.imprimirListaCantantes();
               
        //Consigna 2 - Solicitar un cantante mas y despues mostrar la lista actualizada
        System.out.println("\nIngrese el nombre de otro cantante...");
        entrada1 = suEntrada.pedirEntrada();
        if(entrada1.length()== 0){
            do {
                System.out.println("Esta cadena no puede estar vacia...\npor favor ingreso el nombre de otro cantante...");
                entrada1 = suEntrada.pedirEntrada();
            }while (entrada1.length()== 0);
        }
        miLista.getListaDeNombres().add(entrada1);//Agrego el cantante
        miLista.imprimirListaCantantes();
       
        //Consigna 3 - Preguntar si se quieren añadir mas cantantes
        do{
            System.out.println("\nQuiere cargar mas cantantes?? S = Continua / Cualquier otro Cancela)");
            respuestaUsuario = suRespuesta.pedirEntrada();
            if (respuestaUsuario.equals("s")){
                System.out.println("\nIngrese el nombre de otro cantante...");
                entrada1 = suEntrada.pedirEntrada();
                if(entrada1.length()== 0){
                    do {
                        System.out.println("Esta cadena no puede estar vacia...\npor favor ingreso el nombre de otro cantante...");
                        entrada1 = suEntrada.pedirEntrada();
                    }while (entrada1.length()== 0);
                }
                miLista.getListaDeNombres().add(entrada1);//Agrego el cantante
                imprimirdenuevo = true ;//como se agrego un nuevo cantante al final de todo imprimo de nuevo el listado
            }else{
                sigueCargando = false;//para salir del do/while de carga
            }
        }while (sigueCargando);

        if (imprimirdenuevo){
            System.out.println("Lista de cantantes actualizada\n");
            miLista.imprimirListaCantantes();
        }
    }//cierre del main
}//cierre de la clase

Clase entradaTeclado (la corregida)

Código: [Seleccionar]
/**
 * Clase para manipular la entrada por teclado
 *
 * @author Hugo Segura  corregida por Jorge Lopez de aprenderaprogramar.com
 */

import java.util.Scanner;

public class EntradaDeTeclado
{
   public EntradaDeTeclado(){}//constructor por defecto
   
   /* Este metodo retorna un String como reultado de lo ingresado
    * por el usuario mediante el teclado
    */
   public String pedirEntrada(){
       String entradaTeclado = "";
       
       Scanner entradaScanner = new Scanner(System.in);
       entradaTeclado = entradaScanner.nextLine();
       return entradaTeclado;
    }//cierre entradaTeclado
}//Cierre clase

y mi nueva clase de cantantes famosos

Código: [Seleccionar]
/**
 * Clase generica de cantantes famosos
 *
 * @author Hugo Segura (hymsoft) corregida por Jorge Lopez de aprenderaprogramar.com
 */

import java.util.ArrayList;
import java.util.List;

public class ListaCantantesFamosos{
    //Declaracion de variables
    private List<String> listaDeNombres = new ArrayList<String>();//Array de objetos String
   
    //Constructor
    public ListaCantantesFamosos(){
        //Agrego a la lista los 3 cantantes por defecto
        listaDeNombres.add("David Gilmour");
        listaDeNombres.add("Brian Johnson");
        listaDeNombres.add("Rod Evans");
    }//Cierre del constructor
   
    public List<String> getListaDeNombres(){
        return listaDeNombres;
    }//cierre getListaDeNombres
   
    public void setListaDeNombres(List<String> listaDeNombres){
        this.listaDeNombres = listaDeNombres;
    }//cierre setListaDeNombres
   
    public void imprimirListaCantantes(){//metodo que imprime toda la lista de cantantes
        int i = 0;//auxiliar contador
       
         for (String cantantes: listaDeNombres){
            i++;
            System.out.println("Cantante " + i + ": " + cantantes);
        }//cierre for
    }//cierre imprimirListaCantantes

}//cierre clase
Título: Re:El for extendido o bucles for each (CU00666B)
Publicado por: DRANXZ88 en 19 de Julio 2016, 16:53
Hola estaba revisando tu código me he dado cuenta que no cumple como pide el ejercicios porque dice que cada vez que cargue un cantante nuevo tiene que actualizar la lista y no actualiza.
Ademas en el main tu condiciones ya es muy complejo y repetitivo ya usa mucho variable que no es necesario ademas crea objeto mas de la cuenta pudiendo hacer mas corto y atendible ahorrando código. Le hice alguna modificaciones a tu código pero podes agregarle si quiere el de no quedar vació yo le saque nomas para mostrarte que el código no lleva mucha condición ni variable.
Código: [Seleccionar]
package pruebacu00666hymsoft;

public class PruebaCu00666Hymsoft {

    public static void main(String[] args) {
//Declaracion de variables

        String respuestaUsuario = "";//para evitar confusiones con las entradas por teclado
        EntradaDeTeclado suEntrada = new EntradaDeTeclado();//Objeto para pedir el ingreso por teclado
        System.out.println("Empecemos el programa...\n\nCantantes por defecto\n");
        //Consigna 1 - Inicializo el objeto ListaCantantesFamosos y muestro los cantates por pantalla
        ListaCantantesFamosos miLista = new ListaCantantesFamosos();//objeto que guarda la lista de cantantes famosos
        miLista.imprimirListaCantantes();

        do {
            System.out.println("\nIngrese el nombre de otro cantante...");
            respuestaUsuario = suEntrada.pedirEntrada();
            miLista.getListaDeNombres().add(respuestaUsuario);
            miLista.imprimirListaCantantes();
            System.out.println("\nQuiere cargar mas cantantes?? S = Continua / Cualquier otro Cancela)");
            respuestaUsuario = suEntrada.pedirEntrada();
        } while (respuestaUsuario.equalsIgnoreCase("s"));

    }

}
Título: Re:El for extendido o bucles for each (CU00666B)
Publicado por: hymsoft en 20 de Julio 2016, 04:55
Gracias por el comentario DranXZ88. Entendí mal el enunciado, Crei que tenia que pedir mas ingresos de datos y al final imprimir de nuevo el listado actualizado.