Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: @mayakoski en 03 de Septiembre 2019, 06:21

Título: java ejercicio resuelto bucle iterator util concurrent modification CU00667B
Publicado por: @mayakoski en 03 de Septiembre 2019, 06:21
Envío mi ejercicio CU00667B del curso de programación Java básico. Cualquier comentario será bienvenido.


Código: [Seleccionar]
package com.aprenderaprogramar;

public class TestListaCantantesFamosos {
public static void main(String[] args) {

ListaCantantesFamosos nuevaLista = new ListaCantantesFamosos("maya");
boolean continuar = true;

nuevaLista.adicionarCantante();
nuevaLista.adicionarCantante();

nuevaLista.muestraCantantes();

while(continuar) {
nuevaLista.adicionarCantante();
nuevaLista.muestraCantantes();
System.out.println("Desea ingresar mas cantantes (s) SI, (n) NO");
if (new GestionarEntrada().getEntrada().equalsIgnoreCase("n")) {
continuar= false;
}
}
}
}



Código: [Seleccionar]
package com.aprenderaprogramar;

import java.util.ArrayList;
import java.util.Iterator;

public class ListaCantantesFamosos {
CantanteFamoso datosCantante;
private String nombreUsuario;
private ArrayList<CantanteFamoso> listaCantantesFamosos = new ArrayList<CantanteFamoso> ();
GestionarEntrada entrada1;
GestionarEntrada entrada2;

public ListaCantantesFamosos(String pUsuario) {
setNombreUsuario(pUsuario);
}

//add
public void adicionarCantante() {
datosCantante = new CantanteFamoso();
System.out.println("Ingrese nombre del cantante: ");
entrada1 = new GestionarEntrada();
datosCantante.setNombre(entrada1.getEntrada());

System.out.println("Ingrese nombre del disco mas vendido: ");
entrada2 = new GestionarEntrada();
datosCantante.setDiscoConMasVentas(entrada2.getEntrada());

listaCantantesFamosos.add(datosCantante);
}

//getters
public String getNombreUsuario() {
return nombreUsuario;
}

public int getsize() {
return listaCantantesFamosos.size();
}

//setters
public void setNombreUsuario(String nombreUsuario) {
this.nombreUsuario = nombreUsuario;
}

public void muestraCantantes() {
Iterator<CantanteFamoso> it = listaCantantesFamosos.iterator();
CantanteFamoso cantanteTemporal;
while (it.hasNext()) { // Utilizamos el método hasNext de los objetos tipo Iterator
cantanteTemporal = it.next(); // Utilizamos el método next de los objetos tipo Iterator
System.out.println("Cantante: " + cantanteTemporal.getNombre() + " Disco con más ventas: " + cantanteTemporal.getDiscoConMasVentas());
}
}
}



Código: [Seleccionar]
package com.aprenderaprogramar;

import java.util.Scanner;

public class GestionarEntrada {
private String entrada;

public GestionarEntrada() {
pedirEntrada();
//getEntrada();
}

public void pedirEntrada() {
Scanner entradaTeclado1 = new Scanner(System.in);
setEntrada(entradaTeclado1.nextLine());
}

public String getEntrada() {
System.out.println(entrada);
return entrada;
}

public void setEntrada(String entrada) {
this.entrada = entrada;
}
}



Código: [Seleccionar]
package com.aprenderaprogramar;

public class CantanteFamoso {
private String nombre;
private String discoConMasVentas;

public CantanteFamoso() {
setNombre("desconocido");
setDiscoConMasVentas("desconocido");
}

public CantanteFamoso(String pnombre, String pDisco) {
setNombre(pnombre);
setDiscoConMasVentas(pDisco);
}

//Setter
public void setDiscoConMasVentas(String discoConMasVentas) {
this.discoConMasVentas = discoConMasVentas;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

//getter
public String getDiscoConMasVentas() {
return discoConMasVentas;
}

public String getNombre() {
return nombre;
}
}

Título: Re:java ejercicio resuelto bucle iterator util concurrent modification CU00667B
Publicado por: Alex Rodríguez en 09 de Octubre 2020, 14:38
Hola, en relación a esta propuesta de solución, aunque el código funciona y realiza lo pedido en el enunciado del ejercicio, hay varios aspectos de diseño mejorables. Las observaciones serían:

a) La clase ListaCantantesFamosos tiene un atributo CantanteFamoso datosCantante; cuyo uso es más bien el de una variable auxiliar. Por tanto hubiera sido más lógico incluirla como variable local al constructor o métodos si fuera necesario (que realmente no lo es).

b) La clase ListaCantantesFamosos tiene como atributos GestionarEntrada entrada1; y GestionarEntrada entrada2; que no son lógicos para esta clase. Esta clase representa una lista de cantantes y dentro de sus atributos no parece lógico que estén estos objetos. Estos objetos debían ser gestionados más bien desde la clase con el main.

c) Tampoco es habitual que en métodos como adicionarCantante se muestren mensajes por consola, esto normalmente se gestiona desde otras clases o desde el main.

Puede verse una solución correcta para este ejercicio en https://aprenderaprogramar.com/foros/index.php?topic=2889.0

Saludos