Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: el_calderas en 27 de Marzo 2015, 08:10

Título: Solución CU00678B que es polimorfismo java concepto definicion ejemplo practico
Publicado por: el_calderas en 27 de Marzo 2015, 08:10
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.
Título: Re:Solución CU00678B que es polimorfismo java concepto definicion ejemplo practico
Publicado por: toni_apr en 27 de Marzo 2015, 20:31
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.
Título: Re:Solución CU00678B que es polimorfismo java concepto definicion ejemplo practico
Publicado por: el_calderas en 30 de Marzo 2015, 08:51
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.
Título: Re:Solución CU00678B que es polimorfismo java concepto definicion ejemplo practico
Publicado por: toni_apr en 30 de Marzo 2015, 22:52
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
Título: Re:Solución CU00678B que es polimorfismo java concepto definicion ejemplo practico
Publicado por: el_calderas en 31 de Marzo 2015, 08:38
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.