Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: PatAs en 29 de Julio 2017, 14:01

Título: Java Concepto de polimorfismo cómo iterar sobre objetos distintos tipos CU00678B
Publicado por: PatAs en 29 de Julio 2017, 14:01
Buen día. Presento código correspondiente a posible solución del ejercicio propuesto CU00678B del curso de fundamentos de programación Java con BlueJ.

Código: [Seleccionar]
import java.util.*;
/**
 * Corresponde al ejercicio CU00678B - Curso "Aprender Programación java desde cero"
 * de aprenderaprogramar.com
 * 
 * Julio/2017
 */
 /* Enunciado:
(a).-Declarar un ArrayList de objetos tipo 'Set'
(b).-Crear un objeto de tipo 'HashSet' para contener Strings y que contenga
las cadenas: "sol", "luna", "saturno".
(c).-Crear un objeto de tipo 'TreeSet' para contener Integer y que contenga
los números: 2, 8, 5.
(d).-Usando iteradores para recorrer los elementos del ArrayList y el contenido
de cada uno de los elementos, mostrar por pantalla.*/
 /*Nota: Se ha añadido con fines didácticos mostrar también los componentes de los
 objetos HashSet y TreeSet.*/
 
public class TestPolimorfismo {
public static void main (String[] Args) {
ArrayList<Set> lista1 = new ArrayList<Set>(); //item 'a'
Set<String> s = new HashSet<String>(); //item 'b'
s.add("sol");
s.add("luna");
s.add("saturno");
//Muestro los componentes del HashSet
System.out.print("Item (b)- Los componentes de 's': ");
Iterator it1 = s.iterator();
while (it1.hasNext()) {
System.out.print(it1.next()+ "; ");
}
Set<Integer> t = new TreeSet<Integer>(); //item 'c'
t.add(2);
t.add(8);
t.add(5);
//Muestro los componentes del TreeSet
System.out.println("");
System.out.print("Item (c)- Los componentes de 't': ");
Iterator it2 = t.iterator();
while (it2.hasNext()) {
System.out.print(it2.next()+ ("; "));
}
//item 'd' - Se añaden los objetos HashSet y TreeSet al ArrayList
lista1.add(s);
lista1.add(t);

System.out.println("");

System.out.print("Item (d)- Los componentes del ArrayList: ");
//item 'e' recorrido del ArrayList mediante iteradores para mostrar los componentes
Iterator it3 = lista1.iterator();
while (it3.hasNext()) {
Iterator it4 = ((Set)it3.next()).iterator();
while (it4.hasNext()) {
System.out.print(it4.next()+ "; ");
}

}
}
}
Título: Re:Java desde cero - Ejercicio CU00678 - Concepto de polimorfismo
Publicado por: Alex Rodríguez en 16 de Agosto 2017, 18:55
Hola PatAs, ejercicio de cierta complejidad, bien resuelto. Por favor pon siempre los números de ejercicios completos, por ejemplo CU00678B en lugar de CU00678

El fragmento

Código: [Seleccionar]
        while (it3.hasNext()) {
            Iterator it4 = ((Set)it3.next()).iterator();
            while (it4.hasNext()) {
                System.out.print(it4.next()+ "; ");
            }
        }

Puede ser algo complicado de entender para quien no esté habituado a trabajar con Java, pero lo veo buen código

Saludos
Título: Re:Java Concepto de polimorfismo cómo iterar sobre objetos distintos tipos CU00678B
Publicado por: carlacinquemani en 31 de Julio 2018, 17:42
Hola, cómo están? Tengo una duda sobre la porción de código citada en la respuesta, la de los while anidados con los iterator.
Por qué hay que anidarlos así para que se muestre el array completo? Yo lo hice sin while anidados y se muestran el hashset y el treeset por separado.
Gracias!
Título: Re:Java Concepto de polimorfismo cómo iterar sobre objetos distintos tipos CU00678B
Publicado por: Alex Rodríguez en 03 de Diciembre 2018, 20:11
Hola carlacinquemani, el anidamiento se usa aquí para por un lado recorrer una colección de objetos Set que están en lista1 mediante el iterador Iterator it3 = lista1.iterator(); con el while más externo

Y por otro lado para cada Set, que contiene una colección de cadenas de texto (String), se usa el otro while para recorrer esas cadenas.

Este ejercicio se puede resolver de distintas maneras, por lo tanto no necesariamente otro código distinto está mal. En caso de querer mostrar tu código, abre un nuevo tema.

Saludos.