Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: camoay en 26 de Septiembre 2016, 18:19
-
Les dejo el ejercicio CU00678B del curso básico de fundamentos de programación con Java:
Clase TestInterfaceSet:
package com.aprenderaprogramar.java.iniciacion.clase78;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
// ó import java.util.*;
public class TestInterfaceSet {
public static void main(String[] args) {
ArrayList<Set> miSet = new ArrayList<Set>();// creo el arrayList
// creo el HashSet y lo inicializo con 3 objetos String
HashSet<String> miHashSet = new HashSet<String>();
miHashSet.add("sol");miHashSet.add("luna");miHashSet.add("saturno");
// creo el TreeSet y lo inicializo con 2 objetos enteros
TreeSet<Integer> miTreeSet = new TreeSet<Integer>();
miTreeSet.add(2);miTreeSet.add(8);miTreeSet.add(5);
// inicializo el arrayList con los objetos HashSet y TreeSet
miSet.add(miHashSet);miSet.add(miTreeSet);
// Defino iteradores y variables temporales(para el iterador) para cada unos de los conjuntos
Iterator<Set> itMiSet = miSet.iterator();
//Set tmpElement;
Iterator<String> itMiHashSet = miHashSet.iterator();
String tmpString;
Iterator<Integer> itMiTreeSet = miTreeSet.descendingIterator();
Integer tmpInteger;
// inicio un bucle con iterador para visualizar cada objeto del ArrayList
while(itMiSet.hasNext()){
//tmpElement = itMiSet.next();
// inicio un bucle con iterador para visualizar cada objeto del HashSet
while(itMiHashSet.hasNext()){
// el método iterador() implementado en esta clase no garantiza el orden y de hecho lo
// ordena ascendentemente por el valor de cada string, en lugar de por el orden/posición
// dentro del HashSetlo mismo ocurre con el método toString() que da el mismo resultado:
// "luna","saturno","sol",
tmpString = itMiHashSet.next();
System.out.print("\""+tmpString+"\",");
}// end HashSet while
// inicio un bucle con iterador para visualizar cada objeto del TreeSet
while(itMiTreeSet.hasNext()){
// en esta clase TreeSet deja bien claro que existen 2 tipos de iteradores, uno ascendente
// y otro descendente (según el valor de los elementos que lo componen), por lo que se
// puede ordenar en orden descendente como pide el enunciado.
tmpInteger = itMiTreeSet.next();
System.out.print(tmpInteger+",");
}// end TreeSet while
}// end outer while
}// end main method
}// end class
Muchas gracias por sus comentarios.
-
Hola camoay, se nota que has trabajado el código y le has dedicado tiempo, pero hay cosas que habría que mejorar.
La primera cuestión es que al declarar HashSet<String> miHashSet = new HashSet<String>(); estás declarando tipo estático y dinámico HashSet
Lo mejor para trabajar realmente con polimorfismo es declarar el tipo estático el de la interface y el dinámico el de la clase, en este caso sería Set<String> miHashSet = new HashSet<String>();
El otro problema es que tu código es de propósito específico, es decir, no resuelve el problema general de tener varios Set dentro de una colección y poder mostrar sus elementos, sino solo el caso particular del ejercicio.
Normalmente debemos programar buscando generalizar, no casos específicos.
Fíjate en la solución de este ejercicio y compárala con tu solución para ver estas cuestiones: https://www.aprenderaprogramar.com/foros/index.php?topic=2384.0
Saludos