Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: dlegolas en 01 de Febrero 2016, 20:54

Título: iterator java solo imprime o muestra último registro ¿no funciona? Duda CU00667B
Publicado por: dlegolas en 01 de Febrero 2016, 20:54
Buenas tardes, tratando de resolver el ejercicio encuentro un problema con el iterator, al imprimir solo me imprime el ultimo registro ingresado la cantidad de registros que hay en la lista.

A continuación las 3 clases creadas.


Código: [Seleccionar]
public class CantanteFamoso {
        private String nombre, discoxventa;
        //private ArrayList DatosCantante
       
        public CantanteFamoso (){
        }
       
        public void setAgregrarCantante (String vNombre, String vDisco){
            nombre=vNombre;
            discoxventa=vDisco;                   
        }
       
        public String getMostrarNombre (){
            return nombre;
        }
       
        public String getMostarDisco (){
            return discoxventa;
        }
}


La segunda clase es para crear el array que debe contener los objetos tipo "CantanteFamoso". Tengo dos métodos para imprimir. El primero "getImprimirLista" intento utilizar el "iterator" pero me arroja el error comentado: imprime el ultimo elemento registrado tantas veces como elementos haya registrado. El segundo método: imprime bien los resultados pero sin usar el "iterator" y con un "Do - While".

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


public class ListaCantantesFamosos {
    ArrayList<CantanteFamoso> ListaCantante = new ArrayList<>();
    CantanteFamoso vCantante = new CantanteFamoso();
   
    public ListaCantantesFamosos(){       
    }
   
    public void setAgregarCantante (String vNombre, String vDisco){
        vCantante.setAgregrarCantante(vNombre, vDisco);       
        ListaCantante.add(vCantante);
    }
   
    public int getTamanoLista (){
        return ListaCantante.size();
    }
   
    public boolean getValidarPosicion (int vPosicion){
        if (vPosicion>= 0 || vPosicion<getTamanoLista()){
            return true;
        }
        else{
            return false;
        }
    }
   
    public void getImprimirLista(){
        //Creamos el objeto it de tipo Iterator con String
        Iterator<CantanteFamoso> it = ListaCantante.iterator();   
        String vNombre, vDisco;
        //Utilizamos el método hasNext de los objetos tipo Iterator
        while (it.hasNext()) {             
            //Utilizamos el método next de los objetos tipo Iterator
            CantanteFamoso cantante = it.next();
            System.out.println("Nombre:"+cantante.getMostrarNombre()+"   Cancion:"+cantante.getMostarDisco());           
        }
    }   
   
    public void getImprimirLista2(){
        int i = 0;
        System.out.println("Tamano de la lista:"+getTamanoLista());
        do {
            System.out.println("-->"+ListaCantante.get(i).getMostrarNombre()+ListaCantante.get(i).getMostarDisco());
            i+=1;
            if (i>3){
                break;
            }
        } while (getTamanoLista()>i);       
    }
}


A continuación la clase de prueba:

Código: [Seleccionar]
public class TestListaCantanteFamoso2 {

    public static void main (String [] Args){
        EntradaDeTeclado vNombreTeclado = new EntradaDeTeclado();
        EntradaDeTeclado vDiscoTeclado = new EntradaDeTeclado();
        ListaCantantesFamosos2 vListaCantantes = new ListaCantantesFamosos2();
        String vNombre;

        do {
            System.out.println("");System.out.println("");System.out.println("");
            System.out.println("Ingrese Nombre: ((\'N\' para salir)");
            vNombreTeclado.pedirEntrada();
//Si no desea continuar, rompemos el ciclo para evitar realizar mas procesos inncesarios
      if (vNombreTeclado.getEntrada().equalsIgnoreCase("n")){
                break;
            }else{
                System.out.println("Ingrese el Disco más vendido por favor");
                vDiscoTeclado.pedirEntrada();
                vListaCantantes.setAgregarCantante(vNombreTeclado.getEntrada(), vDiscoTeclado.getEntrada());
            }
//Para imprimir con el iterator
            vListaCantantes.getImprimirLista();
//Para imprimir con el Do-While
            //vListaCantantes.getImprimirLista2();
            System.out.println("===============Fin de la Lista ======================");
            System.out.println("");System.out.println("");System.out.println("");
           
        } while (!vNombreTeclado.getEntrada().equalsIgnoreCase("n"));
       
    }
}
Título: Re:iterator java solo imprime o muestra último registro ¿no funciona? Duda CU00667B
Publicado por: Alex Rodríguez en 04 de Febrero 2016, 13:09
Hola dlegolas he intentado compilar el código pero me salta error, indica que falta la clase EntradaDeTeclado. Siempre pega el código de todas las clases para que se pueda compilar y así poder revisar. Espero a que lo revises y pongas el código de todas las clases.

Saludos
Título: Re:iterator java solo imprime o muestra último registro ¿no funciona? Duda CU00667B
Publicado por: dlegolas en 04 de Febrero 2016, 18:59
Disculpa la omisión. Reenvío el mensaje completo:

Buenas tardes, tratando de resolver el ejercicio encuentro un problema con el iterator, al imprimir solo me imprime el ultimo registro ingresado la cantidad de registros que hay en la lista.

A continuación las 4 clases creadas.
EntradaDeTeclado:

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

public class EntradaDeTeclado {

    private String entradaTeclado;

    public EntradaDeTeclado() { //Constructor
        entradaTeclado = "";
    } //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 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
   
    public String getLetra(int vPosicionInicial, int vPosicionFinal){
       
        String vLetra =entradaTeclado.substring(vPosicionInicial,vPosicionFinal);
       
        return vLetra;
    }
} //Cierre de la clase

segunda clase:
Código: [Seleccionar]
public class CantanteFamoso {
        private String nombre, discoxventa;
        //private ArrayList DatosCantante
       
        public CantanteFamoso (){
        }
       
        public void setAgregrarCantante (String vNombre, String vDisco){
            nombre=vNombre;
            discoxventa=vDisco;                   
        }
       
        public String getMostrarNombre (){
            return nombre;
        }
       
        public String getMostarDisco (){
            return discoxventa;
        }
}

La tercera clase es para crear el array que debe contener los objetos tipo "CantanteFamoso". Tengo dos métodos para imprimir. El primero "getImprimirLista" intento utilizar el "iterator" pero me arroja el error comentado: imprime el ultimo elemento registrado tantas veces como elementos haya registrado. El segundo método: imprime bien los resultados pero sin usar el "iterator" y con un "Do - While".
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;


public class ListaCantantesFamosos {
    ArrayList<CantanteFamoso> ListaCantante = new ArrayList<>();
    CantanteFamoso vCantante = new CantanteFamoso();
   
    public ListaCantantesFamosos(){       
    }
   
    public void setAgregarCantante (String vNombre, String vDisco){
        vCantante.setAgregrarCantante(vNombre, vDisco);       
        ListaCantante.add(vCantante);
    }
   
    public int getTamanoLista (){
        return ListaCantante.size();
    }
   
    public boolean getValidarPosicion (int vPosicion){
        if (vPosicion>= 0 || vPosicion<getTamanoLista()){
            return true;
        }
        else{
            return false;
        }
    }
   
    public void getImprimirLista(){
        //Creamos el objeto it de tipo Iterator con String
        Iterator<CantanteFamoso> it = ListaCantante.iterator();   
        String vNombre, vDisco;
        //Utilizamos el método hasNext de los objetos tipo Iterator
        while (it.hasNext()) {             
            //Utilizamos el método next de los objetos tipo Iterator
            CantanteFamoso cantante = it.next();
            System.out.println("Nombre:"+cantante.getMostrarNombre()+"   Cancion:"+cantante.getMostarDisco());           
        }
    }   
   
    public void getImprimirLista2(){
        int i = 0;
        System.out.println("Tamano de la lista:"+getTamanoLista());
        do {
            System.out.println("-->"+ListaCantante.get(i).getMostrarNombre()+ListaCantante.get(i).getMostarDisco());
            i+=1;
            if (i>3){
                break;
            }
        } while (getTamanoLista()>i);       
    }
}

La clase de prueba:

Código: [Seleccionar]
public class TestListaCantanteFamoso2 {

    public static void main (String [] Args){
        EntradaDeTeclado vNombreTeclado = new EntradaDeTeclado();
        EntradaDeTeclado vDiscoTeclado = new EntradaDeTeclado();
        ListaCantantesFamosos2 vListaCantantes = new ListaCantantesFamosos2();
        String vNombre;

        do {
            System.out.println("");System.out.println("");System.out.println("");
            System.out.println("Ingrese Nombre: ((\'N\' para salir)");
            vNombreTeclado.pedirEntrada();
//Si no desea continuar, rompemos el ciclo para evitar realizar mas procesos inncesarios
      if (vNombreTeclado.getEntrada().equalsIgnoreCase("n")){
                break;
            }else{
                System.out.println("Ingrese el Disco más vendido por favor");
                vDiscoTeclado.pedirEntrada();
                vListaCantantes.setAgregarCantante(vNombreTeclado.getEntrada(), vDiscoTeclado.getEntrada());
            }
//Para imprimir con el iterator
            vListaCantantes.getImprimirLista();
//Para imprimir con el Do-While
            //vListaCantantes.getImprimirLista2();
            System.out.println("===============Fin de la Lista ======================");
            System.out.println("");System.out.println("");System.out.println("");
           
        } while (!vNombreTeclado.getEntrada().equalsIgnoreCase("n"));
       
    }
}

Título: Re:iterator java solo imprime o muestra último registro ¿no funciona? Duda CU00667B
Publicado por: Alex Rodríguez en 04 de Febrero 2016, 19:30
Hola, el código sigue sin compilarme. En la clase TestListaCantanteFamoso2 en la línea ListaCantantesFamosos2 vListaCantantes = new ListaCantantesFamosos2();

aparece el error cannot find symbol - class ListaCantantesFamosos2

Si te fijas los nombres de clases no coinciden. Revisa el código, compílalo en tu pc y una vez lo tengas compilándolo correctamente cópialo y pégalo, de esa manera evitas errores por usar código que no sea el definitivo...

Saludos