Autor Tema: CU00667B iterator java util concurrent modification exception tipos bucles.  (Leído 2622 veces)

Jarper

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Buenas tardes,

en principio el código siguiente realiza lo que en el Ejercicio se pide.
Me gustaría saber si cometo fallos metódicos en la programación. Qué cosas cambiaríais y como las pondríais.
Seguramente esté programando como el principiante que soy.
Ante todo, muchas gracias.
Código: [Seleccionar]
public class CantanteFamoso
{
    private String nombre;
    private String discoConMasVentas;
    public CantanteFamoso(String valorNombre, String valorDisco){
        nombre = valorNombre;
        discoConMasVentas = valorDisco;
    }
    public CantanteFamoso()
    {
       nombre = "";
       discoConMasVentas = "";
    }
    public void setNombre(String valorNombre){
        nombre = valorNombre;
    }
    public void setDisco(String valorDisco){
        discoConMasVentas = valorDisco;
    }
    public String getNombre(){ return nombre;}
    public String getDisco(){ return discoConMasVentas;}
}

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class ListaCantantesFamosos2
{
    private ArrayList<CantanteFamoso> listaCantantesFamosos;
    private String nombre;
    public ListaCantantesFamosos2(String valorNombre){
        nombre = valorNombre;
        listaCantantesFamosos = new ArrayList<CantanteFamoso>();
    }
    public void addCantante(CantanteFamoso valorCantante){
        listaCantantesFamosos.add(valorCantante);
    }
    public void iteracion(){
        Iterator<CantanteFamoso> it = listaCantantesFamosos.iterator();
        CantanteFamoso cmpIterador = new CantanteFamoso();
        while(it.hasNext())
        {
            cmpIterador = it.next();
            System.out.println("Cantante: " + cmpIterador.getNombre() + "   Disco con más ventas:" + cmpIterador.getDisco()); 
        }
    }
    public CantanteFamoso añadirCantantes(){
        CantanteFamoso nuevoCantante = new CantanteFamoso();
        System.out.println("Por favor introduzca los datos de otro cantante.");
        System.out.print("Nombre: ");
        Scanner entradaTeclado1 = new Scanner(System.in);
        String cantante = entradaTeclado1.nextLine();
        System.out.print("Disco con más ventas: ");
        Scanner entradaTeclado2 = new Scanner(System.in);
        String disco = entradaTeclado2.nextLine();
        nuevoCantante.setNombre(cantante);
        nuevoCantante.setDisco(disco);
        return nuevoCantante;
    }
}

Código: [Seleccionar]
import java.util.Scanner;
public class TestCantanteFamoso
{
    public static void main(String [] args){
        ListaCantantesFamosos2 lista = new ListaCantantesFamosos2("Lista de Cantantes Famosos 2.");
        CantanteFamoso famoso1 = new CantanteFamoso("Madonna","All I want is you.");
        CantanteFamoso famoso2 = new CantanteFamoso("Jorge Negrete","Jalisco.");
        lista.addCantante(famoso1);
        lista.addCantante(famoso2);
        System.out.println("La lista iniciar contiene los siguientes datos:");
        lista.iteracion();
        lista.addCantante(lista.añadirCantantes());
        int i = 0;
        while( i == 0){
            System.out.println("La lista actualizada contiene los siguientes datos:");
            lista.iteracion();
            System.out.println("¿Desea introducir los datos de otro cantante?");
            Scanner entradaTeclado = new Scanner(System.in);
            String decision = entradaTeclado.nextLine();
            switch(decision){
                case "s": lista.addCantante(lista.añadirCantantes());
                break;
                case "n": i = 1;
                break;
                default: System.out.println("Ha escogido una opción no válida");
                break;
            }
        }
    }
}

Muchas gracias, atentamente.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Jarper

Tu ejercicio de los cantantes famosos está muy bien.

Quiero comentarte pero un detalle de la clase CantanteFamoso.
La clase es operativa y funciona al 100%.
He visto que usas los métodos setDisco y getDisco que se refieren al atributo discoConMasVentas.
Veras, hay una convención en Java que establece que un setter tendrá por nombre el nombre del atributo que modifica anteponiéndole la partícula set. Ejem. setDiscoConMasVentas
Lo mismo sucede con el getter.

Que ventajas tiene esta convención. Pues que tú al mirar los atributos que tiene una clase (por muy larga y complicada que sea esta), no hace falta que busques los setters y los getters para saber como invocarlos, es decir anteponiendo la partícula set o get al nombre del atributo ya tienes el nombre del método que quieres invocar.

He visto (y está muy bien) que en la clase ListaCantantesFamosos2 tienes dos métodos 'addCantante' y 'añadirCantantes' que en la clase TestCantanteFamoso concatenas en una instrucción para añadir un cantante nuevo. Repito, muy bien.

Saludos

Jarper

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Muchas gracias por dedicarme tu tiempo.
Y muchas gracias por la corrección, eso es lo que busco cuando posteo un ejercicio (mejorar como programador y no cometer fallos de principiante).

Se agradece que gente experimentada dedique su tiempo en corregir y/o solucionar los problemas de los principiantes.

¡Muchas gracias!

 

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