Autor Tema: Java usar System.in.read(); para pausar ejecución programa ejemplo CU00667B  (Leído 3670 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola. Dejo el Ejercicio CU00667B del tutorial pdf de programación Java. Tipo Iterator api Java. Error java.util.Concurrent ModificationException. 

Enunciado del Ejercicio
EJERCICIO

Crea una clase denominada ListaCantantesFamosos que disponga de un atributo ArrayList listaCantantesFamosos que contenga objetos de tipo CantanteFamoso. La clase debe tener un método que permita añadir objetos de tipo CantanteFamoso a la lista. Un objeto de tipo CantanteFamoso tendrá como atributos nombre (String) y discoConMasVentas (String), y los métodos para obtener y establecer los atributos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y añade manualmente dos objetos de tipo CantanteFamoso a la la lista. Usando iterator muestra los nombres de cada cantante y su disco con más ventas por pantalla. Se debe pedir al usuario un nombre y disco con más ventas de otro cantante famoso, y una vez introducidos los datos mostrar la lista actualizada usando iterator. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir los datos de otro cantante o salir del programa (se podrán introducir tantos datos de cantantes como se desee. Para ello usa un bucle while que dé opción a elegir al usuario).

Clase TestListaCantantesFamosos
Código: [Seleccionar]
import java.io.*;// Para pausar salida por pantalla
// Aquí el test con el método main ejemplo aprenderaprogramar.com
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        String nombre,superVentas;// Variables String para recoger nombre y Disco superventas
        String fuera;// Cadena para comparar si es espacio vacio
        boolean fin=false;// Variable booleana si es true finaliza el programa

        System.out.print ("EjercicioCU00667B\n\n");
        System.out.print ("Introduzca nombres de cantantes y discos superventas.\nPara finalizar Pulse INTRO solamente\n\n");
        System.out.print ("****************Empezamos el programa**************\n");

        ListaCantantesFamosos lista1 = new ListaCantantesFamosos();
        lista1.addCantanteFamoso(new CantanteFamoso("Antonio Machin","Dos Gardenias"));
        lista1.addCantanteFamoso(new CantanteFamoso("Jorge Negrete","Ay Jalisco"));

        System.out.println ("\nLa lista esta formada por " + lista1.getTamaño() + " elementos\n");
        lista1.mostrarCantantes();
        System.out.print("\nPULSE INTRO PARA FINALIZAR \n");
        do
        {
           
            System.out.print ("Por favor introduzca Nombre del Cantante :");
            EntradaDeTeclado entrada1 = new EntradaDeTeclado();
            nombre=entrada1.getEntrada();
            fuera=entrada1.getEntrada();//Variable que de cadena para sacar la entrada por teclado
            fin=fuera.substring(0,entrada1.getLongitud ()).equals("");//Si es espacio vacio para salir del bucle
            if(!fin){
                System.out.print ("Nombre del Disco Super Ventas del Cantante :");
                EntradaDeTeclado entrada2 = new EntradaDeTeclado();
                superVentas=entrada2.getEntrada();
                //Añadir nombre y discoSuperventas a la lista
                lista1.addCantanteFamoso(new CantanteFamoso(nombre, superVentas) );

                System.out.println ("\nLista actualizada con :" + lista1.getTamaño() + " elementos\n");
                lista1.mostrarCantantes();
                // Pausar la salida por pantalla *******************
                System.out.print("\n******************** PULSE INTRO PARA CONTINUAR ***************\n");
                try{
                    System.in.read();
                }catch (IOException ex) {  }   
                // Borrar pantalla en windows, si no funciona con otros sistemas operativos comentar la linea
                System.out.print('\u000C');
                System.out.print("\nPULSE INTRO PARA FINALIZAR\n");
            }

        }while(!fin);
        // Borrar pantalla en windows, si no funciona con otros sistemas operativos comentar la linea
        System.out.print('\u000C');
        System.out.print ("******************* Gracias ************************\n\n");

        System.out.println ("La lista ha quedado formada por " + lista1.getTamaño() + " elementos");
        lista1.mostrarCantantes();
        System.out.print ("\n*****************FIN DEL PROGRAMA ************************");
    } //Cierre del main

} //Cierre de la clase

Clase ListaCantantesFamosos
Código: [Seleccionar]
//Los import deben ir siempre al principio antes de declarar la clase
import java.util.ArrayList;//Cargar biblioteca ArrayList
import java.util.Iterator;//Cargar biblioteca Iterator
 
public class ListaCantantesFamosos {
    private ArrayList<CantanteFamoso> listaCantantes; //Attributos de la lista
//Constructor: crea una lista de nombres vacía
    public ListaCantantesFamosos () {   
        listaCantantes = new ArrayList<CantanteFamoso>(); //Creamos el objeto de tipo ArrayList
    } //Cierre del constructor
    public void addCantanteFamoso (CantanteFamoso registroCantante) { listaCantantes.add (registroCantante); } //Cierre del método
    public CantanteFamoso getCantanteFamoso(int registroCantante) {return listaCantantes.get(registroCantante);} //Cierre del método 

    public int getTamaño () { return listaCantantes.size(); } //Cierre del método

    public void removeNombre (int registroCantante) {  //Método para borrar
        if (registroCantante >= 0 && registroCantante < listaCantantes.size() ) {
            listaCantantes.remove(registroCantante); }
        else { } //else vacío. No existe nombre para la posición solicitada, no se ejecuta ninguna instrucción
    } //Cierre del método removeNombre

    public void mostrarCantantes(){
         Iterator<CantanteFamoso> it = listaCantantes.iterator();
       CantanteFamoso tmpCantante;
        while(it.hasNext()){
            tmpCantante = it.next();
            System.out.println("Cantante: " + tmpCantante.getNombre() + ", Disco Superventas : "+tmpCantante.getSuperVentas());
        }//cierre del while
    }
} //Cierre de la clase

Clase EntradaDeTeclado
Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
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 int getLongitud ()  {  //Método de la clase

        return entradaTeclado.length();

    } //Cierre del método getLongitud

 
} //Cierre de la clase

Clase CantanteFamoso

Código: [Seleccionar]

public class CantanteFamoso
{
    // instance variables - replace the example below with your own
    private String nombre;
    private String superVentas;
    // Constructor de la Clase CantanteFamoso

    public CantanteFamoso() // Constructor sin parametros
    {
        nombre="";
        superVentas="";
    }//Cierre contructor
    public CantanteFamoso(String nombre, String superVentas) // Constructor con parametros
    {
        this.nombre=nombre;
        this.superVentas=superVentas;
    }//CierreConstructor
    //Metodos setter
    public void setNombre(String nombre){this.nombre=nombre;}
    public void setSuperVentas(String superVentas){this.superVentas=superVentas;}
    //Metodos getter
    public String getNombre(){return nombre;}

    public String getSuperVentas(){return superVentas;}

}//Cierre de la clase

Gracias.  :D
« Última modificación: 03 de Enero 2019, 18:43 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas, el ejercicio cumple con lo requerido. Algunos comentarios.

En la clase ListaCantantesFamosos hay dos métodos que usan un parámetro llamado registroCantante, pero un caso con un significado y en otro caso con otro:

Código: [Seleccionar]
public void addCantanteFamoso (CantanteFamoso registroCantante) { listaCantantes.add (registroCantante); }
public CantanteFamoso getCantanteFamoso(int registroCantante) {return listaCantantes.get(registroCantante);}

En el primer caso registrocantente alude a un objeto CantanteFamoso. En el segundo alude a un entero (tipo primitivo). Esto aunque está permitido no es "muy elegante" porque puede originar algo de confusión. Mi recomendación sería usar algo como:

Código: [Seleccionar]
public void addCantanteFamoso (CantanteFamoso registroCantante) { listaCantantes.add (registroCantante); }
public CantanteFamoso getCantanteFamoso(int numRegistroCantante) {return listaCantantes.get(numRegistroCantante);}

Que básicamente es lo mismo, pero donde queda un poco más diferenciado que en un caso se alude a un objeto y en el otro a un entero.

Para quien esté siguiendo el curso y consulte este ejercicio, tener en cuenta que hay algún fragmento de código fuera de los contenidos del curso, por  ejemplo:

Código: [Seleccionar]
// Pausar la salida por pantalla *******************
System.out.print("\n******************** PULSE INTRO PARA CONTINUAR ***************\n");
try{
System.in.read();
}catch (IOException ex) {  } 

El ejercicio puede resolverse sin necesidad de este código, para ver un ejemplo consultar https://aprenderaprogramar.com/foros/index.php?topic=2889.0

Salu2

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Gracias por la corrección Ogramar .
No pensé en diferenciar algo más esto (int registroCantante) ya que así hace alusión al registro no al número de registro.
Ok. ;)
Feliz Año 2019

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Igualmente feliz año. A seguir progresando todos!  ;D

 

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