FUNDAMENTOS DE PROGRAMACIÓN BOLETÍN 3.2: ARRAYS, CADENAS Y LISTAS Curso: 2013/14 Versión: 1.0.5 OBJETIVOS Aprender a manejar agregados de datos indexados de tres tipos distintos: arrays, cadenas (Strings) y listas. Insistir en el uso de estructuras de control selectivas e iterativas, incluyendo la sentencia for extendido. Familiarizarse con las particularidades específicas y las operaciones del tipo String. EJERCICIOS PARA HACER EN EL AULA Cree un proyecto Java llamado B03.2-aula1 y añada los paquetes y clases que se indican a continuación para resolver los siguientes ejercicios: Ejercicio 1: Arrays Cree en el paquete fp.utiles una clase UtilesArrays con los siguientes métodos: a) Un método que dado un número n, un límite inferior y un límite superior, devuelva un array con n números enteros aleatorios con valores comprendidos entre el límite inferior y el límite superior. b) Un método que dado un array devuelva el mismo array pero invertido (ver ejemplo más abajo) c) Realice llamadas a cada uno de los métodos anteriores en la clase TestUtilesArrays del paquete fp.utiles.test para comprobar su correcto funcionamiento. Ejemplos: Crear un array con 6 enteros aleatorios comprendidos entre 5 y 15. Crear un array inverso al [1, 2, 3, 4, 5]. Resultados: Array aleatorio: [8, 12, 7, 13, 5, 14] Array inverso: [5, 4, 3, 2, 1] Ejercicio 2: Cadenas Cree en el paquete fp.utiles una clase Cadenas con los siguientes métodos: a) Un método que reciba una cadena de texto y devuelva el número de vocales que contiene la cadena. Tenga en cuenta que las vocales pueden aparecer en minúsculas o en mayúsculas. No tenga en cuenta las posibles vocales con tildes, diéresis u otros signos ortográficos. b) Un método que dado un número y un carácter indique si el DNI formado por la unión de ambos es correcto2. 1 2 Puede copiar el proyecto del boletín anterior y trabajar sobre él, ya que reutilizaremos parte del mismo. El método para calcular la letra del DNI puede verse en http://es.wikipedia.org/wiki/Número_de_identificación_fiscal. Boletín 3.2: Arrays, cadenas y listas 2 c) Realice llamadas a cada uno de los métodos anteriores en la clase TestCadenas del paquete fp.utiles.test para comprobar su correcto funcionamiento. Ejemplo de ejecución: La cadena Hola Pepe tiene 4 vocales El DNI 12345678Z es correcto Ejercicio 3: Listas Cree en el paquete fp.utiles una clase Listas con los siguientes métodos: a) Un método que dada una lista con nombres de personas y otra lista con apellidos, devuelva una lista de cadenas de tamaño n que se genere con combinaciones aleatorias de un nombre y dos apellidos tomados de las dos listas de entrada. b) Un método que dada una lista de libros, devuelva un array de enteros con tres elementos que indiquen cuántos libros de préstamo diario, semanal, o mensual, respectivamente, hay en la lista de entrada. c) Realice llamadas a cada uno de los métodos anteriores en la clase TestListas del paquete fp.utiles.test para comprobar su correcto funcionamiento. Ejemplo de ejecución del apartado a) Entrada: Lista con las cadenas “Pepe", “Luis”, "Ana" Lista con las cadenas "García", "Romero", "Pérez" Posible salida: [García Pérez Pepe, Romero Pérez Pepe, Pérez Romero Ana, García Pérez Ana] Ejemplo de ejecución del apartado b) Entrada: lista con los libros Libro libro1 = new LibroImpl("978-84-96208-96-4", "Juego de Tronos", "George R.R. Martin", 800, new GregorianCalendar(1998, Calendar.FEBRUARY, 2), 17.60, 15000000, TipoPrestamo.DIARIO); Libro libro2 = new LibroImpl("978-84-339-2042-3", "La conjura de los necios", "John Kennedy Toole", 392, new GregorianCalendar(1990, Calendar.APRIL, 19), 10.00, 30000000, TipoPrestamo.SEMANAL); Libro libro3 = new LibroImpl("978-84-450-7753-5", "El Silmarillion", "J.R.R. Tolkien", 448, new GregorianCalendar(1991, Calendar.APRIL,8), 10.95, 3700000, TipoPrestamo.MENSUAL); Libro libro4 = new LibroImpl("978-84-9793-353-7", "El fin de la eternidad", "Isaac Asimov", 288, new GregorianCalendar(1995, Calendar.DECEMBER, 1), 8.95, 30000000, TipoPrestamo.SEMANAL); Libro libro5 = new LibroImpl("978-84-08-05304-0", "Cosmos", "Carl Sagan", 384, new GregorianCalendar(1990,Calendar.FEBRUARY, 8), 36.00, 15000000, TipoPrestamo.DIARIO); Libro libro6 = new LibroImpl("978-84-272-0309-9", "Viaje al centro de la Tierra", "Julio Verne", 274, new GregorianCalendar(2012, Calendar.AUGUST,6), 18.00, 35000000, TipoPrestamo.DIARIO); Salida: [3, 2, 1] Boletín 3.2: Arrays, cadenas y listas 3 EJERCICIOS PARA HACER EN CASA Cree un proyecto Java llamado B03.2-casa y utilice los paquetes y clases creados en el aula para resolver los siguientes ejercicios: Ejercicio 1: Arrays a) Un método que reciba un número entero tam y devuelva un array de enteros de tamaño tam donde cada elemento sea igual a su posición natural (1 para la primera posición, 2 para la segunda, y así sucesivamente) b) Un método que dados dos arrays del mismo tamaño devuelva otro array que contenga en cada posición el resultado de multiplicar los elementos situados en la misma posición de ambos arrays. c) Un método que dado un array de libros devuelva un array con 12 elementos de tipo entero, de forma que cada uno de ellos indique cuántos libros se han adquirido en el mes correspondiente; así, en la primera posición se almacenará el número de libros que se han comprado en el mes de enero, en la segunda los de febrero, y así sucesivamente. d) Realice llamadas a cada uno de los métodos anteriores en la clase TestUtilesArrays del paquete fp.utiles.test para comprobar su correcto funcionamiento. Ejemplo de ejecución del apartado a) Entrada: tam = 5 Salida: [1, 2, 3, 4, 5] Ejemplo de ejecución del apartado b) Array 1: [1, 2, 3, 4, 5] Array 2: [5, 4, 3, 2, 1] Producto: [5, 8, 9, 8, 5] Ejemplo de ejecución del apartado c) Entrada: lista con los libros del ejercicio para el aula 3.b) Salida: [0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1] Ejercicio 2: Cadenas a) Un método que reciba una cadena de texto y devuelva otra cadena igual a la primera pero con los caracteres en orden inverso. b) Un método que reciba una cadena de texto y un carácter y devuelva el número de apariciones del carácter en la cadena. Utilice los métodos indexOf y lastIndexOf de la clase String para acotar la búsqueda. c) Un método que dada una cadena de caracteres devuelva otra cadena formada por la primera letra de cada palabra de la misma. d) Un método que genere un número de DNI válido de forma aleatoria. e) Un método que dada una cadena que representa un ISBN (véase boletín anterior), se quede únicamente con los caracteres numéricos de la misma. Por ejemplo, dado el ISBN “9780385536516”, debe devolver la cadena “9780385536516”. Boletín 3.2: Arrays, cadenas y listas 4 f) Realice llamadas a cada uno de los métodos anteriores en la clase TestCadenas del paquete fp.utiles.test para comprobar su correcto funcionamiento. Ejemplos: Obtener la inversa de la cadena “Hola Pepe” Calcular las apariciones de los caracteres ‘e’, ’H’ y ’c’ en la cadena “Hola Pepe” Obtener el acrónimo de la cadena “Documento Nacional Identidad“ Obtener un número de DNI aleatorio Obtener los dígitos del ISBN “978-0385536516” Resultado de la ejecución: La cadena “Hola Pepe” tiene como inversa “epeP aloH” La cadena “Hola Pepe” tiene 2 apariciones del carácter e La cadena “Hola Pepe” tiene 1 apariciones del carácter H La cadena “Hola Pepe” tiene 0 apariciones del carácter c La cadena “Documento Nacional Identidad” tiene como acrónimo “DNI” DNI aleatorio: 56229098D El ISBN 978-0385536516 tiene como dígitos 9780385536516 Ejercicio 3: Listas a) Cree un tipo enumerado TipoEntero para clasificar distintos tipos de números enteros como positivo, negativo, par, impar y primo. Escriba un método que dada una lista de enteros y un valor de tipo TipoEntero devuelva una nueva lista con los valores de la lista inicial que sean de dicho tipo. b) Dada una lista de usuarios, devuelva una lista de cadenas con los apellidos y nombres de los usuarios en mayúsculas y separados por comas. c) Realice llamadas a cada uno de los métodos anteriores en la clase TestListas del paquete fp.utiles.test para comprobar su correcto funcionamiento. Ejemplo de ejecución del apartado a) Entrada: lista con los enteros del 1 al 5. Salida: Impares: [1, 3, 5] Pares: [2, 4] Primos: [1, 2, 3, 5] Ejemplo de ejecución del apartado b) Entrada: lista con los siguientes usuarios: Usuario usuario1 = new UsuarioImpl("43326697H", "Aida", "Matrena Lúa", new GregorianCalendar(1992, Calendar.JANUARY, 1)); Usuario usuario2 = new UsuarioImpl("62253096T", "Alberto José", "Gruciano Ciro", new GregorianCalendar(1991, Calendar.DECEMBER,31)); Salida: [MATRENA LÚA, AIDA, GRUCIANO CIRO, ALBERTO JOSÉ]