La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas.

Presentaciones similares


Presentación del tema: "Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas."— Transcripción de la presentación:

1 Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Unidad Didáctica 15

2 UD15: Implementación de iterables Índice  Implementación de Iterables virtuales  Secuencia áurea  Implementación de Iterables basados en otros  Vector multirrecorrido  Iterable cadena bidireccional  Cadena Partida  Ejercicios propuestos de Iterables virtuales  Secuencia dígitos de un entero  Secuencia de caracteres encriptados  Secuencia de caracteres desencriptados

3 UD15: Implementación de iterables Iterables: Secuencia Áurea // Esta secuencia está formada por los cocientes de dos // números de Fibonacci consecutivos public class SecuenciaAurea implements Iterable { private Integer numGenerados; public SecuenciaAurea(Integer numGenerados) { if (numGenerados <= 0){ throw new IllegalArgumentException("El valor debe ser mayor que 0"); } this.numGenerados = numGenerados; } public Iterator iterator() { return new IteradorSecuenciaAurea(numGenerados); }

4 UD15: Implementación de iterables Iterables: Secuencia Áurea private class IteradorSecuenciaAurea implements Iterator { private long vActual, vAnterior; private Integer numGenerados; public IteradorSecuenciaAurea(Integer numGenerados) { vActual = 1; vAnterior = 1; this.numGenerados = numGenerados; } public boolean hasNext() { return numGenerados > 0; }

5 UD15: Implementación de iterables Iterables: Secuencia Áurea public Double next() { if (!hasNext()) { throw new NoSuchElementException(); } Double aureo = new Double(vActual) / new Double(vAnterior); Long i = vActual; vActual = vAnterior + vActual; vAnterior = i; numGenerados--; return aureo; } public void remove() { throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase

6 UD15: Implementación de iterables Iterables: Cadena bidireccional public class CadenaBidireccional implements Iterable { private boolean direccionInversa; private String cadenaAIterar; public CadenaBidireccional(String cad) { if (cad == null){ throw new IllegalArgumentException(); } cadenaAIterar = cad; } public void setDireccionInversa(boolean inversa) { direccionInversa = inversa; } public Iterator iterator() { if (direccionInversa) { return new IteradorCadenaInverso(); } else { return new IteradorCadenaNormal(); }

7 UD15: Implementación de iterables Iterables: Cadena bidireccional private class IteradorCadenaNormal implements Iterator { private Integer posActual; public IteradorCadenaNormal() { posActual = 0; } public boolean hasNext() { return posActual < cadenaAIterar.length(); } public Character next() { if (!hasNext()) { throw new NoSuchElementException(); } Character res = cadenaAIterar.charAt(posActual); posActual++; return res; } public void remove() { throw new UnsupportedOperationException(); }

8 UD15: Implementación de iterables private class IteradorCadenaInverso implements Iterator { private Integer posActual; public IteradorCadenaInverso() { posActual = cadenaAIterar.length()-1; } public boolean hasNext() { return posActual>=0; } public Character next() { if (!hasNext()){ throw new NoSuchElementException(); } Character res = cadenaAIterar.charAt(posActual); posActual--; return res; } public void remove() { throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase Iterables: Cadena bidireccional

9 Iterables: VectorMultiRecorrido public class VectorMultiRecorrido extends Vector implements Iterable { private static final long serialVersionUID = 1L; private TiposRecorridoVector tipoRecorrido; public VectorMultiRecorrido(TiposRecorridoVector tipo) { tipoRecorrido = tipo; } public void setRecorrido(TiposRecorridoVector tipo) { tipoRecorrido = tipo; } public enum TiposRecorridoVector { normal,inverso,pares,aleatorio }

10 UD15: Implementación de iterables Iterables: VectorMultiRecorrido public Iterator iterator() { Iterator itor = null; switch (tipoRecorrido){ case normal: itor = super.iterator(); break; case inverso: itor = new IteradorVectorInverso(); break; case pares: itor = new IteradorVectorPosicionesPares(); break; case aleatorio: Vector aux = new Vector (this); Collections.shuffle(aux); itor = aux.iterator(); break; } return itor; }

11 UD15: Implementación de iterables Iterables: VectorMultiRecorrido private class IteradorVectorInverso implements Iterator { private Integer pos; public IteradorVectorInverso() { pos = size() - 1; } public boolean hasNext() { return pos >= 0; } public T next() { if (!hasNext()) { throw new NoSuchElementException(); } T actual = get(pos); pos--; return actual; } public void remove() { throw new UnsupportedOperationException(); }

12 UD15: Implementación de iterables Iterables: VectorMultiRecorrido private class IteradorVectorPosicionesPares implements Iterator { private Integer pos; public IteradorVectorPosicionesPares() { pos = 0; } public boolean hasNext() { return pos < size(); } public T next() { if (!hasNext()) { throw new NoSuchElementException(); } T actual = get(pos); pos = pos + 2; return actual; } public void remove() { throw new UnsupportedOperationException(); } }/ / Fin clase interna }/ / Fin clase

13 UD15: Implementación de iterables Iterables: Test public static void main(String[] args) { SecuenciaAurea sa = new SecuenciaAurea(10); mostrar(sa); CadenaBidireccional ca = new CadenaBidireccional("abcde"); mostrar(ca); ca.setDireccionInversa(true); mostrar(ca); VectorMultiRecorrido l = new VectorMultiRecorrido (TiposRecorridoVector.normal); l.add(3); l.add(6); l.add(9); l.add(12); mostrar(l); l.setRecorrido(TiposRecorridoVector.aleatorio); mostrar(l); l.setRecorrido(TiposRecorridoVector.inverso); mostrar(l); l.setRecorrido(TiposRecorridoVector.pares); mostrar(l); }

14 UD15: Implementación de iterables Iterables: Test ejecución Secuencia áurea 1.0,2.0,1.5,1.6666666666666667,1.6,1.625, 1.6153846153846154,1.619047619047619, 1.6176470588235294,1.6181818181818182 Cadenas Directa: a,b,c,d,e Inversa : e,d,c,b,a Vector Directa: 3,6,9,12 Aleatorio: 9,3,12,6 Inversa : 12,9,6,3 Pares: 3,9

15 UD15: Implementación de iterables Iterables: Cadena Partida public class CadenaPartida implements Iterable { private Vector v = new Vector (); public CadenaPartida(String cad, Character separador) { if (cad == null){ throw new IllegalArgumentException(); } String delim = "" + separador; StringTokenizer st = new StringTokenizer(cad,delim); while(st.hasMoreTokens()) v.add(st.nextToken()); } public CadenaPartida(String cad, String separador) { if (cad == null) { throw new IllegalArgumentException(); } StringTokenizer st = new StringTokenizer(cad,separador); while(st.hasMoreTokens()) v.add(st.nextToken()); } public Iterator iterator() { return v.iterator(); }

16 UD15: Implementación de iterables Iterables: Cadena Partida 2 public class CadenaPartida2 implements Iterable { private String cadenaAPartir; private Character separador; public CadenaPartida2(String cad, Character separador) { if (cad == null ){ throw new IllegalArgumentException(); } cadenaAPartir = cad; this.separador = separador; } public Iterator iterator() { return new IteradorCadenaPartida(); }

17 UD15: Implementación de iterables Iterables: Cadena Partida 2 private class IteradorCadenaPartida implements Iterator { private Integer posActual,posSiguiente; private String res = null; public IteradorCadenaPartida() { posActual = 0; while (posActual<cadenaAPartir.length() && cadenaAPartir.charAt(posActual) == separador) { posActual++; } if (posActual != cadenaAPartir.length()) { posSiguiente = cadenaAPartir.indexOf(separador,posActual); if (posSiguiente == -1){ posSiguiente = cadenaAPartir.length(); } res = cadenaAPartir.substring(posActual,posSiguiente); } public boolean hasNext() { return res != null; }

18 UD15: Implementación de iterables Iterables: Cadena Partida 2 public String next() { String s = res; if (!hasNext()) { throw new NoSuchElementException(); } posActual = posSiguiente + 1; while(posActual<cadenaAPartir.length() && cadenaAPartir.charAt(posActual) == separador){ posActual++; } if (posActual >= cadenaAPartir.length()) res = null; else { posSiguiente = cadenaAPartir.indexOf(separador,posActual); if (posSiguiente == -1) { posSiguiente = cadenaAPartir.length(); } res = cadenaAPartir.substring(posActual,posSiguiente); } return s; } public void remove() { throw new UnsupportedOperationException();} } } / / Fin clase interna }/ / Fin clase

19 UD15: Implementación de iterables Test: Cadena Partida import agregados.CadenaPartida; import agregados.CadenaPartida2; public class TestCadenaPartida extends Test { public static void main(String[] args) { CadenaPartida cp = new CadenaPartida(" aa bb cc c dd ",' '); mostrar(cp); CadenaPartida cp2_b = new CadenaPartida(" a,a b,b c,c c d,d ",", "); mostrar(cp2_b); CadenaPartida2 cp2 = new CadenaPartida2(" aa bb cc c dd ",' '); mostrar(cp2); } Salida de las cadenas partidas aa|bb|cc|c|dd| a|a|b|b|c|c|c|d|d| aa|bb|cc|c|dd|

20 UD15: Implementación de iterables Índice  Implementación de Iterables virtuales  Secuencia áurea  Implementación de Iterables basados en otros  Vector multirrecorrido  Iterable cadena bidireccional  Cadena Partida  Ejercicios propuestos de Iterables virtuales  Secuencia dígitos de un entero  Secuencia de caracteres encriptados  Secuencia de caracteres desencriptados

21 UD15: Implementación de iterables Iterables: Secuencia dígitos de un entero package secuencias; import java.util.Iterator; import java.util.NoSuchElementException; // Devuelve la secuencias de dígitos que forman un número entero comenzando // por el último y hasta el primero. public class SecuenciaDigitos implements Iterable { private Long valor; public SecuenciaDigitos(Long v) { if (v <= 0){ throw new IllegalArgumentException("El valor debe ser mayor que 0"); } valor = v; } public Iterator iterator() { return new IteradorSecuenciaDigitos(); }

22 UD15: Implementación de iterables Iterables: Secuencia dígitos de un entero private class IteradorSecuenciaDigitos implements Iterator { private long v; public IteradorSecuenciaDigitos() { v = valor; } public boolean hasNext() { return v != 0; } public Integer next(){ Integer digito; if (!hasNext()) { throw new NoSuchElementException(); } digito = (int) v % 10; v = v / 10; return digito; } public void remove() { throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase

23 UD15: Implementación de iterables Iterables: Secuencia caracteres encriptados 1. Cree una clase que nos permita iterar por un objeto String pero devolviéndonos los caracteres correspondientes de una tabla de encriptación. Por ejemplo la siguiente correspondencia: "* abcdefghijklmnñopqrstuvwxyz"; "*qwertyuiopasdfghjklñzxcvbnm "; Observe que al espacio en blanco le corresponde la q y a la z el espacio en blanco. Los caracteres no contemplados los pasará a *. 2. Cree una clase que nos permita iterar por un objeto encriptado de la forma anterior devolviendo los caracteres desencriptados.

24 UD15: Implementación de iterables Iterables: Secuencia caracteres encriptados public class SecuenciaCaracteresEncriptada implements I Iterable { private String cadena; private static final String s1 = "* abcdefghijklmnñopqrstuvwxyz"; private static final String s2 = "*qwertyuiopasdfghjklñzxcvbnm "; public SecuenciaCaracteresEncriptada(String s) { cadena = s; } public SecuenciaCaracteresEncriptada(Iterable s) { cadena = null; for(Character c:s) { cadena = cadena.concat(c.toString()); } public Iterator iterator() { return new IteradorCaracteresEncriptados(); }

25 UD15: Implementación de iterables Iterables: Secuencia caracteres encriptados private class IteradorCaracteresEncriptados implements Iterator { private Integer i; public IteradorCaracteresEncriptados() { i = 0; } public boolean hasNext() { return i < cadena.length(); } public Character next() { if (!hasNext()) throw new NoSuchElementException(); char c = cadena.charAt(i++); int p1= s1.indexOf(c); if (p1 == -1) p1 = 0; return s2.charAt(p1); } public void remove(){ throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase

26 UD15: Implementación de iterables Iterables: Secuencia caracteres desencriptados public class SecuenciaCaracteresDesencriptada implements Iterable { private Iterable itec; private static final String s1 = "* abcdefghijklmnñopqrstuvwxyz"; private static final String s2 = "*qwertyuiopasdfghjklñzxcvbnm "; public SecuenciaCaracteresDesencriptada(Iterable s) { itec = s; } public SecuenciaCaracteresDesencriptada(String s){ itec = new CadenaBidireccional(s); } public Iterator iterator(){ return new IteradorCaracteresDesencriptados(); }

27 UD15: Implementación de iterables Iterables: Secuencia caracteres desencriptados private class IteradorCaracteresDesencriptados implements Iterator { private Iterator itoc; public IteradorCaracteresDesencriptados() { itoc = itec.iterator(); } public boolean hasNext(){ return i < cadena.length(); } public Character next() { if (!hasNext()) throw new NoSuchElementException(); char c = itoc.next(); int p1 = s2.indexOf(c); if (p1 == -1) p1 = 0; return s1.charAt(p1); } public void remove() { throw new UnsupportedOperationException(); } } /* Fin clase interna */ } // Fin clase


Descargar ppt "Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas."

Presentaciones similares


Anuncios Google