Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJosé Carlos Álvarez Castillo Modificado hace 8 años
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.