Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: momo en 05 de Octubre 2014, 23:02
-
/*
* La interface Set de Java es implementada por las clases HashSet y TreeSet. Busca información
* sobre estas clases en la documentación del api Java. Crea un programa Java que haga lo siguiente:
a) Declarar un ArrayList de objetos de tipo Set.
b) Crear un objeto de tipo HashSet para contener Strings y haz que contenga
las cadenas “sol”, “luna”, “saturno”.
c) Crear un objeto TreeSet para contener Integers y haz que contenga los números 2, 8, 5.
d) Añade los objetos HashSet y TreeSet como elementos del ArrayList.
e) Usa iteradores para recorrer los elementos del ArrayList y recorrer el contenido de cada uno
de los elementos y mostrar este contenido por pantalla. Por pantalla deberás
obtener “sol”, “luna”, “saturno”, 8, 5, 2.
Puedes comprobar si tu código es correcto consultando en los foros aprenderaprogramar.com.
import java.util.Set;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.Iterator;
public class Polimorfismo
{
public static void main(String [] args )
{
ArrayList<Set>lista=new ArrayList<Set>();
Set<Integer> contenedorDeNumeros=new TreeSet<Integer>();
Set<String> contenedorDePlanetas=new HashSet<String>();
contenedorDePlanetas.add("Sol");contenedorDePlanetas.add("Luna");contenedorDePlanetas.add("Saturno");
contenedorDeNumeros.add(2);contenedorDeNumeros.add(8);contenedorDeNumeros.add(5);
lista.add(contenedorDePlanetas);
lista.add(contenedorDeNumeros);
int tamañoContenedores=contenedorDeNumeros.size()+contenedorDePlanetas.size();
Iterator<Set> it=lista.iterator();
while(it.hasNext())
{
System.out.println("Mostrar :"+it.next());
}
System.out.println("Tamaño Lista"+tamañoContenedores);
}
}
-
Hola momo!
Aunque vas en buena dirección, a mi entender hay una parte del ejercicio que no entendiste muy bien y tratare de explicártela para que rediseñes el codigo de tu ejercicio.
En la parte "e" el ejercicio pide lo siguiente
e) Usa iteradores para recorrer los elementos del ArrayList y recorrer el contenido de cada uno
de los elementos y mostrar este contenido por pantalla. Por pantalla deberás
obtener “sol”, “luna”, “saturno”, 8, 5, 2.
Fíjate que lo que se debe de mostrar por pantalla, esta en una sola linea y sin los corchetes "[]" para lograr eso se te pide usar mas de un solo iterador en tu código.
Ten en cuenta que las colecciones HashSet y TreeSet admiten el metodo iterator();
Ahora trata de rediseñar tu código para que se muestre por pantalla exactamente la cadena de texto: sol, saturno, luna, 2, 5, 8.
Saludos!
-
Hola Sniper Aquí Esta el Ejercicio modificado.
ahora si me muestra el resultado en una sola linea .
import java.util.Set;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.Iterator;
public class Polimorfismo
{
public static void main(String [] args )
{
ArrayList<Set>lista=new ArrayList<Set>();
ArrayList<Set>lista2=new ArrayList<Set>();
Set<Integer> contenedorDeNumeros=new TreeSet<Integer>();
Set<String> contenedorDePlanetas=new HashSet<String>();
contenedorDePlanetas.add("Sol");contenedorDePlanetas.add("Luna");contenedorDePlanetas.add("Saturno");
contenedorDeNumeros.add(2);contenedorDeNumeros.add(8);contenedorDeNumeros.add(5);
lista.add(contenedorDePlanetas);
lista.add(contenedorDeNumeros);
int tamañoContenedores=contenedorDeNumeros.size()+contenedorDePlanetas.size();
Iterator<Set> it=lista.iterator();
while(it.hasNext())
{
Set objeto=it.next();
Iterator<Set>it2=objeto.iterator();
while(it2.hasNext())
{ System.out.print(it2.next()+",");}
}
System.out.println("");
System.out.println("Tamaño Lista :"+tamañoContenedores);
}
}
-
Hola momo!
Veo que has incluido mejoras positivas en este nuevo código y aunque casi aciertas, no has logrado exactamente lo que te pedí ni lo que pide el enunciado del ejercicio. Por tanto, hay unos cuantos puntos que te comentare.
1ro: Estamos trabajando con "polimorfismo" por lo tanto, mientras mas uses las ventajas del polimorfismo en este ejercicio (y en cada uno de los códigos que diseñes) obtendrás un código mejor estructurado y con mayor eficiencia. No estaria de mas que incluyas un: import java.util.List para luego en ves de ArrayList<Set>lista=new ArrayList<Set>();
declarar List<Set>lista=new ArrayList<Set>();
.
2do: Tu código esta mostrando por pantalla: "Saturno,Sol,Luna,2,5,8," y el ejercicio pide que muestre "sol, luna, saturno, 8, 5, 2.". La primera diferencia es el orden de los objetos y la segunda es que tu cadena termina con una coma "," cuando debería terminar con un punto "."
3ro: Has delclarado ArrayList<Set>lista2=new ArrayList<Set>();
y no le das ninguna utilidad (imagino que fue un descuido no eliminar esa linea de código)
4to: Si te fijas, al compilar nos salta un "warning" Siempre que nos salte un warning debemos de buscar la forma de eliminarlo, un programa puede funcionar a pesar de contener un warning al compilar, pero esto significa deficiencia, o que hay algo que se podría corregir.
A continuación dejo una posible solución a este ejercicio, te sugiero que la analices y realices algunas pruebas y/o cambios.
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.Iterator;
public class TestPolimorfismo
{
public static void main(String []args)
{
//Creacion de objetos de tipos dinámicos List y Set.
List<Set> listObjsUniversoYNumeros = new ArrayList<Set>();
Set<String> universo = new HashSet<String>();
Set<Integer> numeros = new TreeSet<Integer>();
//agregando elementos de tipo String a la colección universo de tipo HashSet
universo.add("sol"); universo.add("luna"); universo.add("saturno");
//agregando elementos de tipo Integer a la colección números de tipo TreeSet
numeros.add(2); numeros.add(8); numeros.add(5);
//agregando elementos de tipos (HashSet y TreeSet) que implementan a la clase Set, a la colección listObjsUniversoYNumeros de tipo ArrayList
listObjsUniversoYNumeros.add(universo);
listObjsUniversoYNumeros.add(numeros);
//Usando iteradores en colecciones.
Iterator<Set> iteratorAL = listObjsUniversoYNumeros.iterator();
Set elemento0 = iteratorAL.next();
Set elemento1 = iteratorAL.next();
/*El compilador no llega a poder verificar qué tipos contienen los Set, eliminamos la declaración de tipo de Iterator (Iterator<Set>) y dejamos que sea
* el compilador en tiempo dinámico quien lo determine, así corregimos el warning que nos salta*/
Iterator iterElemento0 = elemento0.iterator();
Iterator iterElemento1 = elemento1.iterator();
//recorriendo y mostrando por pantalla los elementos de las colecciones universo y numeros, a través de Iterator
String separador = ", ";
System.out.print("\nConjunto de los objetos contenidos en cada una de las sub-colecciones que contiene la colección listObjsUniversoYNumeros: ");
while(iterElemento0.hasNext())
{
System.out.print(iterElemento0.next() + separador);
}
int i = 0;
while(iterElemento1.hasNext())
{
i++;
if(i == elemento1.size())
{
separador = ".";
}
System.out.print(iterElemento1.next() + separador);
}
System.out.println("\nTotal: " + (universo.size() + numeros.size()) + " elementos.");
}
}
Nota: El orden en que se muestran los objetos por pantalla, (se puede corregir) continua diferente con relación a el orden que se muestra en el ejercicio.
Saludos!