Autor Tema: iterator java solo imprime o muestra último registro ¿no funciona? Duda CU00667B  (Leído 4753 veces)

dlegolas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
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"));
       
    }
}
« Última modificación: 04 de Febrero 2016, 13:06 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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

dlegolas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
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"));
       
    }
}


Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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

 

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