FUNDAMENTOS DE PROGRAMACIÓN BOLETÍN DE PROB LEMAS 5: EJ ERCICIOS DE S ECUENCIAS Curso: 2011/12 Versión: 1.0.0 OBJETIVOS Aprender a implementar métodos e invocarlos (paso de parámetros). Afianzar los diferentes usos del for clásico y el for extendido. Reforzar la declaración, inicialización y operaciones con arrays, listas y cadenas. EJERCICIO 1: CLASE ENTEROS En este ejercicio vamos a incorporar nuevos métodos públicos y estáticos en la clase Enteros del paquete fp.utiles creada en el EJERCICIO-2 del boletín 3. Los métodos serán los siguientes: a) public static Integer[] iniArray (Integer tam) que devuelva un array de tamaño tam donde cada elemento es igual a su posición natural (índice+1). Advierta que debe: 1º declarar y dimensionar un array llamado result con capacidad para tam elementos; 2º usar el for clásico de tal forma que en cada iteración se le de valor al i-ésimo elemento de result (result[i]=i+1); y 3º devolver el array (return result). b) public static Double sumaElementos(List<Double> numeros) que devuelva la suma de todos los elementos de la lista numeros. Advierta que debe usar el for extendido de forma que en cada iteración se sume un elemento de la lista a una variable local inicializada a 0. c) public static Double media(List<Double> numeros) que devuelva la media aritmética de todos los elementos de la lista numeros. Utilice el método sumaElementos anterior y el método size del tipo List. d) Observe el siguiente bloque de código: { List<Integer> lista = Arrays.asList(arrayInicial); Collections.reverse(lista); Integer[] arrayAlReves = lista.toArray(); } Tras dichas sentencias, arrayAlReves equivale al inverso de arrayInicial (los mismos elementos en orden inverso). Utilice el for clásico para llevar a cabo un procedimiento equivalente, implementando el siguiente método: public static Integer[] arrayInverso(Integer[] numeros) e) public static List<Double> listaInversa(List<Double> numeros) que como análogo al método anterior devuelva una lista equivalente la lista numeros pero “al revés”. Utilice ahora el for extendido y el método add(p,e) del tipo List que añade el elemento e en la posición p. Bolet ín de problemas 5: Ejercicios de secuencias 2 f) public static List<Integer> primosMenores(Integer n) que devuelva una lista con todos los números primos menores que n. Utilice el for clásico y el método implementado en el apartado d) del ejercicio 2 de l boletín 3. EJERCICIO 2: CLASE CADENAS En este ejercicio vamos a crear la clase de utilidad Cadenas dentro del paquete fp.utiles y añadirle los métodos públicos y estáticos siguientes: a) public static Integer cuentaVocales(String cad) que devuelva el número de vocales que aparecen en cad. Puede usar tanto un for clásico como un for extendido para recorrer los caracteres. Advierta que las vocales pueden aparecer tanto en mayúsculas como en minúsculas. Considere los métodos siguientes de la clase String : length, contains, subSequence, toCharArray, toUpperCase/toLowerCase. b) public static String invierteCadena(String cad) que invierta la cadena cad pasada como parámetro. Declare una variable local result de tipo String inicializada a la cadena vacía ("") y utilice el operador de concatenación (+) para ir añadiéndole caracteres. c) public static Integer cuentaApariciones(String cad, char c) que cuenta el número de apariciones del carácter c en la cadena cad. Utilice los métodos indexOf y lastIndexOf de la clase String para acotar la búsqueda. EJERCICIO 3: CLASE FOTOS En este ejercicio vamos a crear la clase de utilidad Fotos dentro del paquete fp.utiles y añadirle los métodos públicos y estáticos siguientes: d) public static Double cal) List<Foto> fotosConCalificacion(List<Foto> lf, que devuelve una lista con todas las fotos de lf cuya calificación es cal. e) public static Foto fotoMasVisitada(List<Foto> lf) que devuelve la foto de lf con más visitas. f) public static List<Foto> fotosResolucion(List<Foto> Integer[] intervaloAncho, Integer[] intervaloAlto) lf, que devuelve una lista con todas las fotos de lf con un ancho mayor o igual que intervaloAncho[0] y menor o igual que intervaloAncho[1] y con un alto mayor o igual que intervaloAlto[0] y menor o igual que intervaloAlto[1]. Bolet ín de problemas 5: Ejercicios de secuencias 3 Advierta que debe usar un for extendido con un if simple interno el cual tenga un expresión lógica que represente la condición anterior (operador &&). EJERCICIO 4: CLASES TEST a) Añada en el método main de una clase TestEnteros (en el paquete test) sentencias que prueben la corrección de los métodos anteriores de la clase Enteros mostrando el resultado de su invocación en la consola. Por ejemplo las líneas referentes al primer y último apartado podrían ser: … Integer[] miArray = Enteros.iniArray(10); mostrar("El contenido del array es "+Arrays.toString(miArray)); … List<Integer> miLista = Enteros.primosMenores(50); mostrar("El contenido de la lista es "+miLista); b) Análogamente, añada ahora en el método main de una clase TestFotos (también en el paquete test) sentencias que prueben la corrección de los métodos anteriores de la clase Fotos mostrando el resultado de su invocación en la consola. Por ejemplo: … List<Foto> fotos = Persona fotografo1 Persona fotografo2 Persona fotografo3 new LinkedList<Foto>(); = new PersonaImpl( …); = new PersonaImpl( …); = new PersonaImpl( …); … Fecha fecha1 = new FechaImpl(…); Fecha fecha2 = new FechaImpl(…); … Foto Foto Foto Foto foto1 foto2 foto3 foto4 = = = = new new new new FotoImpl("Sevilla",fotografo1,fecha1,…); FotoImpl("Granada",fotografo2,fecha2,…); FotoImpl("Córdoba",fotografo3,fecha1,…); FotoImpl("Almeria",fotografo1,fecha2,…); … fotos.add(foto1); fotos.add(foto2); fotos.add(foto3); fotos.add(foto4); … List<Foto> mejoresFotos= Fotos.fotosConCalificacion(fotos,10); mostrar("Hay "+mejoresFotos.size()+" con máxima calificación"); c) … Por último, compruebe en una clase TestCadenas los métodos de la clase Cadenas.