Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: LPM en 02 de Diciembre 2014, 22:04

Título: CU00667B - Tipo Iterator - Método iterator no encontrado en la clase Test
Publicado por: LPM en 02 de Diciembre 2014, 22:04
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=633:tipo-iterator-api-java-ejemplo-error-javautilconcurrent-modificationexception-resumen-bucles-cu00667b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188 (http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=633:tipo-iterator-api-java-ejemplo-error-javautilconcurrent-modificationexception-resumen-bucles-cu00667b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188)

Hola.

Arreglé el problema que tenía. Me quedó así el ejercicio.

Código: [Seleccionar]
public class CantanteFamoso
{
    private String nombre;
    private String discoMasVendido;
   
    public CantanteFamoso(String nombre,String disco){
        this.nombre=nombre;
        discoMasVendido=disco;
    }
   
    public void setNombre(String nombre){this.nombre=nombre;}
    public void setDisco(String disco){discoMasVendido=disco;}
   
    public String getNombre(){return nombre;}
    public String getDisco(){return discoMasVendido;}
}

Código: [Seleccionar]
import java.util.ArrayList;

public class ListCantantesFamosos
{
    private ArrayList<CantanteFamoso>listaCantantesFamosos;
   
    public ListCantantesFamosos(){
        listaCantantesFamosos=new ArrayList<CantanteFamoso>();
    }
   
    public void addCantante(CantanteFamoso cantante){listaCantantesFamosos.add(cantante);}

    public ArrayList<CantanteFamoso> getLista(){return listaCantantesFamosos;}
}

Código: [Seleccionar]
import java.util.Scanner;
import java.util.Iterator;

public class TestListCantantesFamosos
{
    private ListCantantesFamosos testLista;
    private CantanteFamoso cantante1;
    private CantanteFamoso cantante2;
   
    public TestListCantantesFamosos(){
        cantante1=new CantanteFamoso("Rata","Blanca");
        cantante2=new CantanteFamoso("Mago","De Oz");
        testLista=new ListCantantesFamosos(){{addCantante(cantante1);addCantante(cantante2);}};
    }

    private void mostrarCantantesIt(){
        Iterator<CantanteFamoso> listaIt=testLista.getLista().iterator();
        CantanteFamoso tmpCantante;
        while (listaIt.hasNext()){
            tmpCantante=listaIt.next();
            System.out.println("Cantante "+tmpCantante.getNombre()+" con su disco "+tmpCantante.getDisco()+" mas vendido.");
        }
    }
   
    private void addCantanteTeclado(){
        Scanner teclado=new Scanner (System.in);
        System.out.print("Escriba su nombre: ");
        String nombre=teclado.nextLine();
        System.out.print("Su disco mas vendido?");
        String disco=teclado.nextLine();
        CantanteFamoso cantanteAgregado=new CantanteFamoso(nombre,disco);
        testLista.addCantante(cantanteAgregado);
    }
   
   
    public static void main (String []args){
        Scanner tecladoMain=new Scanner(System.in);
        TestListCantantesFamosos testLista1=new TestListCantantesFamosos();
        System.out.println("Los cantantes en la lista actual son:");
        testLista1.mostrarCantantesIt();
        System.out.println("Ahora agregue un cantante.");
        testLista1.addCantanteTeclado();
        int intentos=0;
        do{System.out.print("Agregar otro cantante? Si/No: ");
           String respuesta=tecladoMain.next();
           if(respuesta.equalsIgnoreCase("si")){
                intentos=0;
                testLista1.addCantanteTeclado();
           }else if(respuesta.equalsIgnoreCase("no")){
                System.out.print("Ok.");
                intentos=3;
           }else{System.out.println("Escriba si o no para continuar");
                  intentos++;
                  if (intentos==3){System.out.println("Ha intentado agregar un cantantes varias veces sin éxito");
                                 break;
                                  }
           }
        }   
        while(intentos<3);
        System.out.println("Ahora los cantantes de la lista actual son: ");
        testLista1.mostrarCantantesIt();
    }
}

Título: Re:CU00667B - Tipo Iterator - Método iterator no encontrado en la clase Test
Publicado por: César Krall en 04 de Diciembre 2014, 12:49
Hola, aunque tu código funcione te recomendaría que cambiaras o mejoraras algunas cosas:

En la clase TestListCantantesFamosos defines atributos y un constructor. Mejor no hacerlo así, sino simplemente dejarla con el método main. Esta clase sirve para conducir el programa, por tanto no tiene mucho sentido que contenga datos ni constructores.

El comienzo de esta clase podría ser algo así:

   public static void main(String[] args) {
        ListaCantantesFamosos lista1 = new ListCantantesFamosos();

Y a partir de ahí empezar a trabajar...

Otra cosa: en la clase TestListCantantesFamosos declaras private void mostrarCantantesIt() y addCantanteTeclado()

Hay cosas mal planteadas: ¿mostrarCantantesIt() es un método para mostrar cantantes de una lista? Entonces este método debe estar en la clase ListCantantesFamosos. Cada clase se ocupa de sus cosas.


El método addCantanteTeclado() lo mismo: si es un método para añadir un teclado a una lista debe ir en la clase de lista, no en otra clase.

Todo esto nos resume que un código puede funcionar pero no podremos decir que está bien diseñado si no se siguen las pautas de la programación orientada a objetos.

Saludos!!!