Autor Tema: CU00678B ejemplo práctico de polimorfismo Java  (Leído 4698 veces)

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
CU00678B ejemplo práctico de polimorfismo Java
« en: 05 de Octubre 2014, 23:02 »
Citar
/*
 * 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.




Código: [Seleccionar]

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);

   
    }
}

« Última modificación: 08 de Octubre 2014, 08:09 por Alex Rodríguez »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:CU00678B
« Respuesta #1 en: 06 de Octubre 2014, 17:50 »
 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
Citar
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!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
Re:CU00678B
« Respuesta #2 en: 07 de Octubre 2014, 01:43 »
Hola Sniper Aquí Esta el Ejercicio modificado.
ahora si me muestra el resultado en una sola linea .

Código: [Seleccionar]
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);

    }
}




Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:CU00678B
« Respuesta #3 en: 07 de Octubre 2014, 18:46 »
 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
Código: [Seleccionar]
ArrayList<Set>lista=new ArrayList<Set>(); declarar
Código: [Seleccionar]
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
Código: [Seleccionar]
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.
Código: [Seleccionar]

 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!
« Última modificación: 07 de Octubre 2014, 20:05 por Sniper »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

 

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