Autor Tema: Java evitar que el código sea complejo o repetitivo bucles for each CU00666B  (Leído 2623 veces)

hymsoft

  • Intermedio
  • ***
  • Mensajes: 103
  • hymsoft
    • Ver Perfil
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
« Última modificación: 01 de Agosto 2016, 21:08 por Alex Rodríguez »
"Una persona inteligente es aquel que sabe ser tan inteligente como para contratar gente mas inteligente que el"

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:El for extendido o bucles for each (CU00666B)
« Respuesta #1 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"));

    }

}

hymsoft

  • Intermedio
  • ***
  • Mensajes: 103
  • hymsoft
    • Ver Perfil
Re:El for extendido o bucles for each (CU00666B)
« Respuesta #2 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.
"Una persona inteligente es aquel que sabe ser tan inteligente como para contratar gente mas inteligente que el"

 

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".