Autor Tema: Definir objeto y crear ArrayList de él en entorno aprendizaje BlueJ CU00667B  (Leído 4023 veces)

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
Hola a todos !! Paso a dejar el código del ejercicio CU00667B del manual de programación Java con entorno de aprendizaje BlueJ. Desde ya muchas gracias.

Saludos

Luis

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.


Clase Test (main)

Código: [Seleccionar]
import java.util.*;
// Aquí el test con el método main ejemplo aprenderaprogramar.com
public class Test {
    public static void main (String [ ] args) {
       String nombreCantante = "";
       String nombreDisco="";
       String respuesta="";
       ListaCantantesFamosos lista = new ListaCantantesFamosos("Nombres introducidos por usuario");
       EntradaDeTeclado entrada = new EntradaDeTeclado();
       nombreCantante = "Madonna";
       nombreDisco = "All I want is you";
       lista.addLista(nombreCantante,nombreDisco);
       nombreCantante = "Jorge Negrete";
       nombreDisco = "Jalisco";
       lista.addLista(nombreCantante,nombreDisco);
       Iterator <CantanteFamoso> it=lista.iterator();
       while(it.hasNext()){
            CantanteFamoso itemLista;
            itemLista=(CantanteFamoso)it.next(); // objeto de la lista que estamos viendo
            nombreCantante = itemLista.getNombre();
            nombreDisco = itemLista.getDisco();
            System.out.println("Cantante :"+nombreCantante+"  -  Disco mas vendido: "+nombreDisco); 
        }
       do {
           System.out.println("Desea introducir los datos otro cantante (s/n)?");   
           entrada.pedirEntrada();
           respuesta=entrada.getEntrada();
           if (respuesta.equals("s")) {
               System.out.println ("Por favor introduzca el nombre cantante:");
               entrada.pedirEntrada();
               nombreCantante=entrada.getEntrada();
               System.out.println ("Por favor introduzca el nombre del disco:");
               entrada.pedirEntrada();
               nombreDisco=entrada.getEntrada();
               lista.addLista(nombreCantante,nombreDisco);
               Iterator <CantanteFamoso> it2=lista.iterator();// Agrega a la lista
               while(it2.hasNext()){
                  CantanteFamoso itemLista;
                  itemLista=(CantanteFamoso)it2.next(); // objeto de la lista que estamos viendo
                  nombreCantante = itemLista.getNombre();
                  nombreDisco = itemLista.getDisco();
                  System.out.println("Cantante :"+nombreCantante+"  -  Disco mas vendido: "+nombreDisco); 
               }
            } else if(respuesta.equals("n")) {break;} else {respuesta="s";}
          }
        while(respuesta.equals("s"));
      }
   
    } //Cierre del main


Clase ListaCantantesFamosos

Código: [Seleccionar]
//Ejemplo de uso ArrayList aprenderaprogramar.com
import java.util.*; //Los import deben ir siempre al principio antes de declarar la clase
//Esta clase representa una lista de nombres manejada con la clase ArrayList de Java
public class ListaCantantesFamosos {
    private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
    private ArrayList<CantanteFamoso> listadenombres; //Declaramos un ArrayList que contiene objetos String

    public ListaCantantesFamosos (String nombre) {    //Constructor: crea una lista de nombres vacía
        nombreDeLaLista = nombre;
        listadenombres = new ArrayList<CantanteFamoso>(); //Creamos el objeto de tipo ArrayList
    } //Cierre del constructor

    public void addLista(String valor_nombre, String valor_disco) {
        CantanteFamoso cantanteFamoso = new CantanteFamoso(valor_nombre, valor_disco);
        listadenombres.add(cantanteFamoso);
    } //Cierre del método

    public int getTamanio () { return listadenombres.size(); } //Cierre del método

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


Clase CantanteFamoso (el objeto de la lista anterior)

Código: [Seleccionar]
// Creación de la clase ListaCantantesFamosos.
 public class CantanteFamoso {   
     private String cantante;
     private String disco; // Hace alusión al disco mas vendido
     public CantanteFamoso(){ // constructor 1 - sin ingreso de datos
        cantante = "";
        disco = "";
     } // fin constructor 1
     public CantanteFamoso(String nombreCantante,String discoCantante) { // constructor 2 - con entrada de datos nombre y disco
        cantante = nombreCantante;
        disco = discoCantante;
     } // fin constructor 2
     // metodos setters
    public void setNombre(String nombreDelCantante) {
        cantante = nombreDelCantante;
    }
    public void setDisco(String nombreDelDisco) {
        disco = nombreDelDisco;
    }
    // metodos getters
    public String getDisco() {
        return disco;
    }
    public String getNombre() {
        return cantante;
    }
  }// fin de la clase


Clase para ingresar nombre del cantante y nombre del disco. Tambien sirve para ingresar "s" o "n".

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
    private int entradaNumero;
    public EntradaDeTeclado ()  { //Constructor
        entradaTeclado="";
        entradaNumero=0;
     //   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 void pedirNumero (){
        Scanner entradaEscaner = new Scanner (System.in);
        entradaNumero = entradaEscaner.nextInt ();
    }
    public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada

    public int getNumero() {return entradaNumero;}
   
    public String getPrimeraPalabra ()  {
               for (int i=0; i < entradaTeclado.length() - 1; i++) {
            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
                return entradaTeclado.substring(0, i+1);         }
        }
        return entradaTeclado;  //Caso de que no se detecte ningún espacio devolvemos lo que haya
    } //Cierre del método getPrimeraPalabra

    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    } //Cierre del método getLongitud

} //Cierre de la clase
« Última modificación: 22 de Junio 2017, 18:46 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Luis el ejercicio hace lo que se pedía

[Repito] Por favor, si creas temas en el foro, ponle un título adecuado siguiendo las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Cuando se trate de responder a un ejercicio, te recomiendo seguir lo que indica el ejercicio, por ejemplo en lugar de private String disco; usar private String discoConMasVentas; ya que es lo que indica el ejercicio. De este modo se puede valorar la corrección del ejercicio. En códigos que crees tú libremente (que también puedes subir al foro si lo deseas) es otra cosa.

Este método no lo veo correcto

Código: [Seleccionar]
    public void addLista(String valor_nombre, String valor_disco) {
        CantanteFamoso cantanteFamoso = new CantanteFamoso(valor_nombre, valor_disco);
        listadenombres.add(cantanteFamoso);
    } //Cierre del método

addLista significa añadir lista. Tú no estás añadiendo una lista, estás añadiendo un cantante, por tanto el nombre que describe lo que hace el método sería addCantante (que sigue el estándar de forma de nombrar métodos en Java); otras opciones serían addToList ó addCantanteALista pero con addCantante lo veo bien, mejor no complicar las cosas. El nombre addLista es confuso, si los nombres de clases, métodos, etc. son confusos los programas no serán de buena calidad.

En la clase con el main hay dos fragmentos casi iguales, en while(it.hasNext()) y while(it2.hasNext())

Cuando el código se repite es síntoma de un mal diseño. El código no debe repetirse, hay que evitar la "redundancia". Si necesitas hacer varias veces la misma cosa, crea un método e invócalo cada vez que lo necesites. De ese modo el código se escribe una vez, y no varias veces.

Otro detalle no adecuado, usar break para salir de un bucle en else if(respuesta.equals("n")) {break;} En general no debe usarse break para salir de un bucle, sólo cuando no puede establecerse la salida de forma natural a través de la condición del bucle.

¿Qué ocurre si borras else if(respuesta.equals("n")) {break;} else {respuesta="s";} ? Analízalo tú mismo y trata de tener claro el por qué ocurre eso

Saludos

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
"¿Qué ocurre si borras else if(respuesta.equals("n")) {break;} else {respuesta="s";} ? Analízalo tú mismo y trata de tener claro el por qué ocurre eso"

Funciona correctamente.
Ese código lo puse para validar que la salida sea por "n" y no con cualquier otra tecla. Sacando esa parte de código el mensaje debería ser "presiona "s" para agregar datos o cualquier otra tecla para salir"
Muchas gracias !!!
Saludos
Luis

 

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