AGRUPANDO OBJETOS (Parte-II) Por Corina Flores Villarroel corina@memi.umss.edu.bo UMSS -
El ciclo while Un ciclo while es similar en su estructura y proposito al ciclo for-each Contiene una cabecera y un cuerpo. El cuerpo puede ser ejecutado repetidas veces.
El ciclo while Su sintaxis es: while (condicion del ciclo) { } // cuerpo El ciclo while es más flexible que el ciclo foreach, en vez de iterar para cada elemento de la coleccion, while puede iterar flexiblemente el numero de veces dependiendo de la condicion.
El ciclo while La condicion es una expresion booleana que determina si el cuerpo deberia ser ejecutado al menos una vez. Si la condicion se evalua como VERDAD, el cuerpo es ejecutado. Una vez que el cuerpo se ejecuta debe volver a evaluarse la condicion. Este proceso continua hasta que la evaluacion de la condicion sea FALSA. Si la condicion es falsa, salta el cuerpo del ciclo y ejecuta la siguiente instruccion inmediatamente.
El ciclo while Por ejemplo, escribamos el ciclo while para imprimir todas las citas de nuestra agenda de citas. public void listacitas() { int index = 0; while(index < citas.size()){ System.out.println(citas.get(index)); index++; } }
El ciclo while El ciclo while es equivalente a for-each. Analizemos el ejemplo: El ciclo while es mas complicado porque tenemos que hacer la declaracion de una variable que juega como indice fuera del ciclo. Inicializamos la variable en cero para el primer elemento de la coleccion. La lista de elementos de la coleccion no es fijada automaticamente, sino que debemos utilizar el metodo get de ArrayList.
El ciclo while Mantenemos nuestro propio contador (variable) para recordar las veces de ejecucion. Debemos recordar incrementar el contador (variable). El ciclo for-each es mas seguro en el sentido de garantizar siempre su finalizacion. En cambio con while es posible cometer el error de ciclo infinito.
El ciclo while Ciclo infinito se da cuando hemos olvidado incrementar el valor del contador (variable) antes de salir del cuerpo del ciclo. La condicion nunca llegara ser falsa provocando una iteracion infinita de veces. Sin embargo while tambien tiene algunas ventajas respecto a for-each 1. El ciclo while no necesita relacionarse siempre con una coleccion. 2. Utilizamos while para procesar una coleccion y podemos parar de hacerlo el momento que se desea.
El ciclo while Veamos el siguiente ejemplo: int num = 0; while(num <= 10){ System.out.println(num); num = num +2; }
Iterando sobre una coleccion Para examinar cada elemento de una coleccion, el ArrayList provee de una manera de iterar (acción de repetir una serie de pasos un cierto número de veces) sobre su contenido. El metodo iterador de ArrayList retorna un objeto Iterador Iterador es una clase definida en el paquete java.util. Entonces, para utilizar en el programa debemos escribir: import java.util.iterator;
Iterando sobre una coleccion La clase Iterator provee dos metodos para iterar sobre una coleccion: HasNext Next La sintaxis es: Iterator<Tipo_Elemento> it = micoleccion.iterator(); Notar que Iterator es tambien una clase generica, porque esta parametrizado con el tipo de elemento de la coleccion.
Iterando sobre una coleccion Una representación general: Clase Iterator<Tipo_Elemento> it = micoleccion.iterator(); while(it.hasnext()){ it.next() ; // Después, hacer algo con el elemento. Metodo } Usamos iterator para chequear repetidas veces si hay mas elementos (it.hasnext()) y luego conseguimos el proximo elemento (it.next())
Iterando sobre una coleccion /** * Lista todas las citas de la agenda usando iterator. */ public void listacitas1() { Iterator<String> it = citas.iterator(); while(it.hasnext()) { System.out.println(it.next()); } }
Acceso por índice vs. iteradores Hasta ahora hemos visto 3 maneras diferentes de iterar sobre un ArrayList: 1. Ciclo for-each 2. Ciclo While y El método get con índice 3. Objeto Iterator La opción 1 y 3, cuando todos los elementos de la colección van a ser procesados. La opción 2, se puede interrumpir más facilmente el procesamiento a mitad de hacerlo, es decir, solo procesar parte de la colección.
Acceso por índice vs. iteradores Para un ArrayList los dos métodos get e iterator son igualmente buenos de aplicar. Si utilizamos el método get, podemos ingresar u obtener los elementos de una colección a través de un índice Si deseamos iterar sobre todos los elementos de la colección usamos un objeto Iterator
Colecciones de tamaño fijo Existen aplicaciones en el que de antemano se conoce el número de elementos a almacenar en la colección. En este caso debemos usar la forma especializada de colecciones de objetos tamaño fijo. A este tipo de colecciones se denomina arreglos
Colecciones de tamaño fijo Si bien el tamaño fijo de los arreglos puede ser una desventaja. Hay dos cosas que compensan como ventaja de los arreglos frente a las colecciones de tamaño flexible. El acceso a los elementos contenidos en un arreglo es más eficiente, que en una colección flexible. Los arreglos son capaces de almacenar objetos o valores de tipos primitivos. Las colecciones flexibles solamente almacenan objetos.(arraylist)
Declaración de un arreglo La sintaxis: tipodato[ ] nombrevariable; tipodato nombrevariable[ ]; La característica que distingue la declaración de un arreglo, son [ ] Por ejemplo: int[ ] contadorpuntaje; // indica que es un arreglo de enteros
Declaración de un arreglo Asi por ejemplo: public class EjemploArreglos1 { private int[] contadorpuntaje; Arreglo de valores primitivo } Arreglo de objetos public class EjemploArreglos2 { private Registro[] personas; }
Creación o inicializacion de un arreglo La sintaxis: nombrearreglo = new tipodato[tamano]; Cuando se declara una variable arreglo, ésta no tine ningún valor. Antes de asignar cualquier valor se debe, reservar un espacio en memoria, utilizando el operador new. Por ejemplo: contadorpuntaje = new int [24]; // crea un arreglo capaz de almacenar 24 elementos.
Creación de un arreglo Continuando con el ejemplo anterior public class EjemploArreglos1 { private int[] contadorpuntaje; public EjemploArreglos1() { contadorpuntaje = new int[24]; }
Creación de un arreglo Continuando con el ejemplo anterior public class EjemploArreglos2 { private Registro[] personas; private int cant; public EjemploArreglos2(int c) { personas = new Registro[c]; }
Utilización de un arreglo La sintaxis: nombrearreglo [índice] Para acceder a un elemento de un arreglo, se coloca el nombre del arreglo y entre corchetes el índice del elemento que se desea. Por ejemplo, si se desea obtener el número 8 del siguiente arreglo: 0 1 2 3 4 5 6 3 6 8 1 0 4 2 contadorpuntaje [2]
Indices de un arreglo Generalmente el arreglo inicia su índice en cero, siendo asi que su índice final es igual al tamaño total menos 1. Por ejemplo, el tamaño de este arreglo es 7 : 0 1 2 3 4 5 6 contadorpuntaje 3 6 8 1 0 4 2
Indices de un arreglo El tamaño de un arreglo se puede obtener con el método length, de la siguiente manera: nombrearreglo.length Para el ejemplo anterior, si desearíamos realizar un recorrido sobre el arreglo, deberíamos escribir for(int i=0; i < contadorpuntaje.length; i++)
Ciclo for Sirve para repetir una secuencia de instrucciones, sobre todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instrucción Su sintaxis es: for (inicializacion; condicion; incremento) { // cuerpo del ciclo }
Ciclo for La inicialización es una instrucción de asignación que carga la variable de control de ciclo con un valor inicial. La condición es una expresión relacional, que evalúa la variable de control de ciclo contra un valor final o de parada que determina cuando debe acabar el ciclo. El incremento define la manera en que la variable de control de ciclo debe cambiar cada vez que la computadora repite un ciclo. Se deben separar esos 3 argumentos con punto y coma (;)
Para más detalles acerca de ESTRUCTURAS DE CONTROL SE RECOMIENDA Ver el material acerca de este tema publicado en un archivo de nombre estructurascontrol.pps en la pagina de la materia.
TAREAS para entregar TAREA1: Abrir el proyecto coleccion de www.cs.umss.edu.bo Examinar las clases: Listas y Persona Se han dejado en comentario en la clase Listas los métodos a implementar 1. borrarpersona 2. buscarmayoredad 3. muestramayores 4. muestramenores 5. muestraordenada
TAREAS para entregar TAREA2: Se pide abrir el proyecto de nombre Products o Producto desde www.cs.umss.edu.bo. Buscar en el libro Primero Objetos con Java los ejercicios: 4.34, 4.35, 4.36, 4.37 y 4.38, leer cuidadosamente cada uno y proceder con su ejecución. FECHA de ENTREGA de ambos ejercicios por definir