Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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.
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".
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:
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"));
}
}
-
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
-
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:
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:
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".
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:
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"));
}
}
-
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