Autor Tema: Solución CU00678B que es polimorfismo java concepto definicion ejemplo practico  (Leído 5098 veces)

el_calderas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 43
    • Ver Perfil
Hola,
Esta es mi solución para este ejercicio, pero tengo una duda respecto al enunciado y no se si es correcto.El ejercicio pide una salida de texto concreta, Sol ,Luna, Saturno, 8, 5, 2.
Pero la salida que devuelve el objeto iterator es Luna, Saturno, Sol, 2, 5, 8. ya que llas clases HasNext y TreeSet ordenan internamente los objetos que se les añaden.
¿El ejercicio pide que la salida sea en concreta la que pide? es decir, colocando en un orden determinado cada componente.

Este es mi codigo:

Código: [Seleccionar]
import java.util.HashSet;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.Set;
import java.util.Iterator;

public class TestVariablePolimorfica
{
    public static void main(String[]args){
        ArrayList<Set>miLista=new ArrayList<Set>();
        HashSet<String>miListaDeStrings=new HashSet<String>();
        TreeSet<Integer>miListaDeIntegers=new TreeSet<Integer>();

        miListaDeStrings.add("luna");
        miListaDeStrings.add("sol");
        miListaDeStrings.add("saturno");

        miListaDeIntegers.add(2);
        miListaDeIntegers.add(8);
        miListaDeIntegers.add(5);

        miLista.add(miListaDeStrings);
        miLista.add(miListaDeIntegers);

        //System.out.println(miLista.size());

        Iterator<String>itS=miListaDeStrings.iterator();
        while(itS.hasNext()){
            String tmp=itS.next();
            System.out.print(tmp + ",");
        }
        Iterator<Integer>itI=miListaDeIntegers.iterator();

        while(itI.hasNext()){
            Integer tmp=itI.next();
            System.out.print(tmp);
            if(itI.hasNext()){
                System.out.print(",");
            }else{
                System.out.print(".\n");
            }

        }

    }
}

Un saludo.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola calderas

Tu ejercicio presenta la información solicitada, pero no utilizas el código correcto.

Se pide extraer la información de la lista 'miLista' que contiene elementos que pertenecen al interface Set

Piensa que después de estas instrucciones:

        miLista.add(miListaDeStrings);
        miLista.add(miListaDeIntegers);

si ejecutas las siguientes:

     miListaDeStrings = null;
     miListaDeIntegers = null;

¿Cómo sacarías la información de la lista 'miLista'?

Ahí está el ejercicio. Si tienes alguna duda consulta en el foro.

Saludos.

el_calderas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 43
    • Ver Perfil
Hola,
Pues tienes razon, no me di cuenta...
Aqui mando mi nuevo codigo, pero me ha dado muchisimos problemas y he tenido que consultar varias opciones en el foro.
Aun asi, me compila con este warning:
"uses unchecked or unsafe operations. Recompile with -Xlintuncheked for details."
y no se que significa.
 El objetivo del ejercicio es recorrer una lista formada por distintos tipos de objetos.
Pero no me queda clara la forma de obtener, imprimir, esa lista. No consigo que salgan en el orden especificado.
Si me podeis ayudar con algun consejo.


Código: [Seleccionar]
import java.util.HashSet;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.Set;
import java.util.Iterator;

public class TestVariablePolimorfica
{
    public static void main(String[]args){
        ArrayList<Set>miLista=new ArrayList<Set>();
        HashSet<String>miListaDeStrings=new HashSet<String>();
        TreeSet<Integer>miListaDeIntegers=new TreeSet<Integer>();

        miListaDeStrings.add("luna");
        miListaDeStrings.add("sol");
        miListaDeStrings.add("saturno");

        miListaDeIntegers.add(2);
        miListaDeIntegers.add(8);
        miListaDeIntegers.add(5);

        miLista.add(miListaDeStrings);
        miLista.add(miListaDeIntegers);

     
        for(Set tmp:miLista){
            Iterator<Set>it=tmp.iterator(); //Cuando compilo me da un warning: "uses unchecked or unsafe operations."
                                            // "Recompile with -Xlintuncheked for details."
                                           
            while(it.hasNext()){
                System.out.println(it.next());
            }
        }
    }
}
Un saludo y gracias.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola calderas

He hecho unos cambios en tu código que no presentan warnings
Código: [Seleccionar]
import java.util.HashSet;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.Iterator;

public class TestVariablePolimorfica
{
    public static void main(String[]args){
        List<Set>miLista=new ArrayList<Set>();
        Set<String>miListaDeStrings=new HashSet<String>();
        Set<Integer>miListaDeIntegers=new TreeSet<Integer>();

        miListaDeStrings.add("luna");
        miListaDeStrings.add("sol");
        miListaDeStrings.add("saturno");

        miListaDeIntegers.add(2);
        miListaDeIntegers.add(8);
        miListaDeIntegers.add(5);

        miLista.add(miListaDeStrings);
        miLista.add(miListaDeIntegers);

        //         for(List tmp: miLista) {
        for(Set tmp:miLista){
            Iterator it=tmp.iterator();
            if(tmp instanceof HashSet) {
                System.out.println("Elementos del HashSet.");
            } else {
                System.out.println("Elementos del TreeSet.");
            }
            int i = 0;                               
            while(it.hasNext()){
                System.out.println("i: " + (i++) + " - " + it.next());
            }
        }
    }
}

Como verás, aunque todos los objetos que se piden en el enunciado se crean del tipo especificado, se declaran todos con el interface Set de forma que todos tienen un interface común.
Además el iterador dentro del for each no especifica de que tipo se creará, espera recibir el objeto y dinámicamente usa el tipo que recibe.
El warning en tiempo de compilación se debe a que la línea del iterador advertía que no había garantia de que se recibiera el tipo requerido en tiempo de ejecución.

Respecto al orden de salida de los elementos.
No, no se especifica ese orden específico. Aunque el objeto TreeSet permite con su método descendingIterator() obtener la salida en orden inverso.

Espero haberte ayudado

Saludos

el_calderas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 43
    • Ver Perfil
Muchas gracias por la aclaración, si me has ayudado, ya que no podia quitar el warning y no entendia porque aparecia.
Por lo que veo, entonces, a la hora de crear un iterador, no siempre es imprescindible especificar el tipo que recibirá, si los objetos, aunque de distinto tipo, implementen la misma interface, ¿me equivoco?

Con respecto a la modificación, en la forma que lo haces se identifica mejor el elemento de salida.
Muchas gracias.

 

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