Ejercicios de la UD07¶
Ejercicios¶
-
(
package Varios) Diseñar la claseVarioscon los siguientes métodos estáticos que se harán apoyándose en alguna clase de las vistas al estudiar las colecciones de Java:int[] quitarDuplicados (int[] v), que dado un array de enteros devuelva otro array con los mismos valores que el original pero sin duplicados.int[] union1(int[] v1, int[] v2), que dados dos arrays v1 y v2 devuelva otro array con los elementos que están en v1 o que están en v2, sin que ningún elemento se repita.int[] union2(int v1[], int v2[]), que dados dos arrays v1 y v2 devuelva otro array con los elementos que están en v1 o que están en v2. En este caso, si hay elementos duplicados se mantendrán.int[] interseccion(int v1[], int v2[]), que dados dos arrays v1 y v2 devuelva otro array con los elementos que aparecen en los dos arrays. Cada elemento común aparecerá una sola vez en el resultado.int[] diferencia1 (int v1[], int v2[]), que dados dos arrays v1 y v2 devuelva otro array con los elementos de v1 que no están en v2. En caso de haber elementos duplicados en v1 estos se mantendrán en el resultado.int[] diferencia2 (int v1[], int v2[]), que dados dos arrays v1 y v2 devuelva otro array con los elementos de v1 que no están en v2. El array resultante no tendrá elementos duplicados.
-
(
package Biblioteca) Se quiere hacer una aplicación en la que los usuarios van a hacer búsquedas de libros para saber si se encuentran en los fondos de la biblioteca. El funcionamiento básico sería algo así: Al iniciarse la aplicación todo el catálogo de libros se cargaría en memoria y a partir de ese momento los usuarios pueden realizar búsquedas por título, que interesa que sean lo más rápidas posibles. Nunca se insertan nuevos libros durante la ejecución de la aplicación.-
Diseña la clase
Librocon los métodos que consideres oportunos y los siguientes atributos:Titulo(String): Es el dato que identifica al libro.Autor(String): Autor del libro.Estantería(String): Estantería de la biblioteca en la que se encuentra el libro.
-
Diseña la clase
CatalogoLibroscomo una colección de libros. Utiliza el tipo de colección que crees que más se ajusta a los requisitos de la aplicación justificando la elección. Implementa los siguients métodos: -
public CatalogoLibros(Libro v[]): Constructor. Para simplificar, inicializa el catálogo y lo rellena con los libros delarray v, en lugar de obtenerlos de un fichero. -
public String buscar(Libro l): Dado un libro, lo busca en el Catálogo y devuelve la estantería en la que se encuentra el libro o null si el libro no está en el Catálogo.
-
-
(
package Academia) Se quiere diseñar una claseAcademia. De una Academia se conoce su nombre, dirección y las Aulas que tiene (Necesitas también generar la claseAula).Definir la clase
Academiautilizando una Collection para almacenar las aulas. El tipo de colección a utilizar se decidirá teniendo en cuenta que éstas se quieren mantener ordenadas según el criterio del métodocompareTode la claseAula. Implementar los atributos, el constructor, y los siguientes métodos:void ampliar (Aula a), que añade un aula a la academia.void quitar (Aula a), que elimina un aula de la academia.int getNumAulas(), que devuelva el número de aulas que tiene.toString(), que muestre todas las aulas de la academia.
-
(
paquete ListaEspera) Deseamos mantener la lista de espera de pacientes de un hospital.Se quiere poder:
- Añadir pacientes a la lista.
- Mantener los pacientes por orden de inserción en la lista de espera.
- Obtener el paciente más prioritario (al que hay que atender de la lista de espera), es decir, el que más tiempo lleva esperando, el que antes entró en el hospital.
Pasos a seguir:
- Diseña la clase
Pacientecon los atributos nombre y gravedad. La gravedad es un valor aleatorio (entre 1: más grave y 5: menos grave) generado al crear el paciente. - Realiza la implementación de la clase
ListaEsperacon la estructura de datos elegida. Añade los métodos para insertar un paciente, obtener de la lista de espera al más prioritario y eliminar de la lista de espera al más prioritario. ¿Qué tipo de estructura de datos utilizaríamos para almacenar los pacientes, unList,SetoMap? Justifica la respuesta (puntos a favor de la que elijes y en contra de las que descartas). - Implementa una
ListaEsperaPorGravedad, en la que se atienda primero a los pacientes más graves, independientemente de si llegaron antes o después.
-
(
paquete DiccionarioIngEsp)Diseñar la clase
DiccionarioBilingüepara almacenar pares formados por:-
Palabra en castellano.
-
Colección de traducciones a ingles.
La clase dispondrá de los siguientes métodos:
-
Constructor: crea el diccionario vacio.
-
anyadirTraduccion(String cast, String ingl): Añade la pareja (cast, ingl) al diccionario de forma que:- Si la palabra
castno estaba en el diccionario la añade, junto con su traducción. - Si la palabra
castestaba ya en el diccionario pero no aparecía como traducción la palabraingl, añadeingla su colección de traducciones. - Si la palabra
castestaba y la traduccióningltambién, no se realizarán cambios. - El método devuelve
truesi se han realizado cambios en el diccionario yfalseen caso contrario.
- Si la palabra
-
QuitarTraduccion(String cast, String ingl): Quita la traduccióningla la palabracast. Si la palabra en castellano se queda sin traducciones, se elimina del dicicionario. Si se han producido cambios se devuelvetruey en caso contrariofalse. -
traduccionesDe(String cast): Devuelve una colección con las traducciones de la palabra indicada o null si la palabra no está en el diccionario. -
toString(): Devuelve un String con las palabras del diccionario y sus traducciones. -
(clase
RepeticionPalabras) Escribe un programa que abra el fichero de texto que indique el usuario y muestre cuántas veces se repite cada palabra que contiene. Ayudarse de unMap. ¿Se podría resolver con unSet? ¿Y con unList? - (clase
TraductorSimple) Escribir un programa que solicite al usuario una frase y la muestre traducida a inglés, palabra a palabra. Para ello, se dispone de un ficheropalabras.txtque contiene parejas (palabra en español, palabra en inglés) separadas por un tabulador. Cada pareja se encuentra en una línea del fichero. El proceso será el siguiente: - Leer el fichero y cargar sus datos en una estructura de datos adecuada. Tener en cuenta que nos interesará buscar una palabra en castellano y obtener su correspondencia en inglés.
- Solicitar al usuario una frase. Traducir, usando la estructura de datos anterior, cada palabra de la frase y formar con ellas la frase traducida.
- Mostrar la frase traducida al usuario.
-
-
(
paquete ListaAdmitidos) Una serie de personas han solicitado realizar un curso de inglés. De las que han sido admitidas se quiere almacenar su nif, su nombre y su nivel en unHashSet. En elHashSetse almacenarán objetos de la clase Inscripción-
Implementa la clase
Incripciónpara representar el nif, nombre y nivel de un solicitante. Además de los atributos implementa aquellos métodos que consideres necesarios. -
Escribe un programa (clase
ComprobarAdmision) que-
Defina un
HashSetde Inscripciones, llamadoadmitidas. -
Añada varias inscripciones (invéntate los datos).
-
Permita al usuario introducir un dni para comprobar si la persona indicada ha sido admitida. Indicarle si aparece o no en la lista y, en caso afirmativo, mostrar el nombre y el nivel en que ha sido admitido.
-
-
-
(
clase PalabrasOrdenadas) Escribe un programa que, dado un fichero de texto cuya ubicación indica el usuario, muestre sus palabras ordenadas ascendentemente y, después, descendentemente. Cada palabra se mostrará una sola vez, aunque en el texto aparezca varias.
Actividades¶
-
Actividad 1. Realizar las siguientes actividades relacionadas con
ArrayList.- Crear un
ArrayListde enteros llamado misNumeros. - Añadir los valores 1, 6, 3, 2, 0, 4, 5.
- Mostrar los datos del
ArrayList. - Mostrar el valor de la posición 5.
- Añadir el valor 8 en la posición 4.
- Cambiar el valor de la posición 1 por 9.
- Eliminar el valor 5. (
misNumeros.remove(new Integer(5))) - Eliminar el valor de la posición 3.
- Recorrer el array con un bucle for.
- Recorrer el array con un bucle
Iterator. - Comprobar si existe el elemento 0.
- Comprobar si existe el elemento 7.
- Clonar el
ArrayListmisNumerosen otro llamadocopiaArrayList. - Añadir el elemento 9.
- Mostrar la posición de la primera ocurrencia del elemento 9.
- Mostrar la posición de la última ocurrencia del elemento 9.
- Borrar todos los elementos del
ArrayListcopiaArrayList. - Comprobar si el
ArrayListcopiaArrayListestá vacio. - Convertir el
ArrayListmisNumerosen unArrayy recorrerlo con un bucle mejorado.
- Crear un
-
Actividad 2. Un cine precisa una aplicación para controlar las personas de la cola para los estrenos de películas. Debemos crear una lista con la edad de las personas de la cola y tendremos que calcular la entrada según la edad de la persona (mínimo 5 años). Para la edad de la persona se generan aleatoriamente números entre 5 y 60 años. Al final, deberemos mostrar la cantidad total recaudada. El número de personas de la cola se elige al azar entre 0 y 50.
La lista de precios se basa en la siguiente tabla.
EDAD PRECIO Entre 5 y 10 años 5 € Entre 11 y 17 años 7.5 € Mayor de 18 años 9.5 € Como comprobación imprime el número de personas, el precio total y la lista de edades. Por ejemplo:
1 2 3
Hay un total de 6 personas en la cola. El precio total es de 57,00 euros [18, 36, 50, 35, 28, 55] -
Actividad 3. Un supermercado nos pide que hagamos una aplicación que almacene los productos comprados. La aplicación debe almacenar
Productos(clase) y cada producto al crearse contiene una cantidad, un precio (generados aleatoriamente). El nombre del producto será básico (producto1, producto2, producto3, etc.). Calcular el precio total de una lista de entre 1 y 10 productos (aleatorio). Mostrar un ticket con todo lo vendido y el precio final. -
Actividad 4. Desarrollar un sistema de gestión de pacientes. Tendremos un archivador dónde iremos guardando todas las fichas de los pacientes. Las fichas contienen la siguiente información: nombre, apellidos y edad.
Todas las fichas que vayamos creando, se podrán guardar o eliminar del archivador. Al archivador también le podremos pedir un listado. Este listado consistirá en visualizar por pantalla el número de fichas guardadas, así como el contenido de las fichas.
La clase
GestionPacientestiene un métodomainen el que se crea un archivador, dos o tres fichas que se guardarán en el archivador, se listará el contenido, se eliminará alguna ficha y se volverá a listar su contenido. Todas las clases se guardarán en el paquetegestionpacientes. -
Actividad 5. Crear una estructura
Mapllamada divisas, que almacene pares de moneda y valor al cambio en euros. Por ejemplo Dólar: 0,81€- Añadir los siguientes pares moneda/valor al Map divisas:
Moneda Valor en € Dólar Americano 0.81 Franco Suizo 0.85 Libra Esterlina 1.14 Corona Danesa 0.13 Peso Mexicano 0.04 Dólar Singapur 0.62 Real Brasil 0.24 -
Mostrar el valor de la Libra Esterlina.
-
Mostrar todas las divisas con las que se opera y su valor.
-
Indicar el número de divisas del Map.
-
Eliminar la divisa Real Brasil y mostrar los datos del Map.
-
Mostrar si existe la divisa Peso Mexicano.
-
Mostrar si existe la divisa Euro.
-
Mostrar si existe el valor al cambio 0.85 €.
-
Mostrar si existe el valor al cambio 0.33 €.
-
Indicar si el Map divisas está vacío.
-
Borra todos los componentes del Map divisas.
-
Volver a indicar si el Map divisas está vacío.
Ejercicios Genericidad¶
-
Crear una clase Genericos (proyecto Genéricos, paquete Genericos) que incorpore los métodos genéricos que se indican a continuación. Los métodos creados serán public static. En el proyecto se creará además la clase o clases necesarias para probar los métodos desarrollados.
Object minimo (Object o1, Object o2), que devuelva el mínimo de dos objetos cualesquiera (que se suponen del mismo tipo). Una vez desarrollado, prueba el método para obtener el mínimo de dos objetos Integer. Pruébalo también para obtener el mínimo entre un Objeto Integer y un objeto String. En éste último caso, el programa ¿da error de ejecución? Si es así, explica por qué.Object maximo (Object o1, Object o2), que devuelva el maximo de dos objetos cualesquiera (que se suponen del mismo tipo).Object minimo (Object v[]), que devuelva el mínimo de un array de objetos cualesquiera (que se suponen del mismo tipo). Al respecto de éste último comentario, ¿Se puede poner en un array de Object objetos de distinto tipo, como por ejemplo Strings, Integer, ...? En caso afirmativo, ¿funcionaría el método desarrollado con un array construido así?Object maximo (Object v[]), que devuelva el maximo de un array de objetos cualesquiera (que se suponen del mismo tipo).int numVeces(Object v[], Object x)que devuelva el el numero de apariciones del objeto x en el array v.int numVecesOrdenado(Object v[], Object x)que devuelva el el numero de apariciones del objeto x en el array v ordenado ascendentemente.int mayores(Object v[], Object x)que, dado un array de Object v y un Object x devuelva el número de elementos de v que son mayores que x.int mayoresOrdenado(Object v[], Object x)que, dado un array de Object v ordenado ascendentemente y un Object x devuelva el número de elementos de v que son mayores que x.int menores(Object v[], Object x)que, dado un array de Object v y un Object x devuelva el número de elementos de v que son menores que x.int menoresOrdenado(Object v[], Object x)que, dado un array de Object v ordenado ascendentemente y un Object x devuelva el número de elementos de v que son menores que x.boolean estaEn(Object v[], Object x)que devuelva true si el Objeto x está en el array v.boolean estaEnOrdenado(Object v[], Object x)que devuelva true si el Objeto x está en el array v, ordenado ascendentemente.int posiciónDe(Object v[], Object x), que devuelva la posición que ocupa x dentro del array v, o -1 si x no está en v.int posicionDeOrdenado(Object v[], Object x), que devuelva la posición que ocupa x dentro del array v ordenado ascendentemente, o -1 si x no está en v.boolean estaOrdenado(Object v[]), que devuelva true si el array está ordenado ascendentemente.
-
(
paquete Nevera) Se quiere crear una aplicación que controla una nevera inteligente de última generación. Los alimentos que contiene la nevera se van a representar como objetos de la claseAlimentoy la claseNeveraInteligente, tiene un array de Alimentos entre sus atributos privados.Se pide implementar la clase Alimento teniendo en cuenta que uno de los métodos de NeveraInteligente necesitará ordenar por calorías los Alimentos que contiene la nevera utilizando un método de Ordenación genérico. El diseño de la clase Alimento ha de incluir, por tanto, determinados elementos que lo permitan. La clase Alimento tendrá únicamente dos atributos (privados): nombre y calorias.
-
(
paquete Academia) Se quiere diseñar una clase Academia . De una Academia se conoce su nombre, dirección y las Aulas que tiene (Aula es una clase implementada en un ejercicio de herencia que ya hicimos).- Definir la clase
Academiautilizando una colección (que permita ordenación) para almacenar las aulas.: Implementar los atributos, el constructor, y los siguientes métodos: -void ampliar (Aula a), que añade un aula a la academia. -void quitar (Aula a), que elimina un aula de la academia. -int getNumAulas(), que devuelva el número de aulas que tiene. - métodotoString() - Realiza en la clase
Aulalos cambios necesarios para que se pueda ordenar las aulas de la Academia usando un método genérico de ordenación. El orden sería creciente por capacidad del aula., y a igual capacidad primero las aulas de mayor superficie - Añade a la clase
Academiaun métodoordenarque ordene las aulas con el criterio especificado. Para realizar la ordenación se llamará a un método de ordenación.
- Definir la clase
-
(
paquete Conjuntos)-
Diseñar un interface Conjunto para modelizar conjuntos de elementos. Diseñar (solo la cabecera) de los siguientes métodos de la clase conjunto (prestar atención a si los métodos deben ser static o no):
Añadir, que añade un elemento al conjunto, provocando la excepciónElementoDuplicadosi el elemento ya estaba en el conjunto.Quitar, que elimina el elemento indicado al conjunto. ProvocaElementoNoEncontradosi el elemento indicado no estaba en el conjunto.-
Intersección¸ que dados dos conjuntos que recibe como parámetro devuelve un tercer conjunto que es la intersección de los dos dados. -
Pertenece¸ que dado un elemento devuelve si este pertenece o no al conjunto.
-
Diseñar una clase
ConjuntoArrayque implemente el interfaceConjunto. Esta clase implementará los métodos del interfaceConjunto. Para ello utilizará un arrayObject elementos[]y unint numElementos, de manera que los elementos del conjunto se mantendrán almacenados en el array. Además de los métodos del interface habrá que crear un constructor para la clase y también vendrá bien tener un métodotoStringpara poder probarla.
NOTA: También lo puedes implementar con una Colección de las vistas en el tema anterior.
-
Programación funcional. Funciones Lambda.¶
-
Supongamos que tenemos implementada una clase
Libroque tiene los atributos detitulo,autoryprecio, con el correspondiente constructor y sus getters. Disponemos además de una lista de libros en una variablelibros. Se pide implementar un método que muestre los títulos de los libros por pantalla, ordenados de menor a mayor. -
Disponemos de una clase llamada
Recetaque almacena los datos de una receta de cocina: su nombre, su categoría (carnes, pastas...) y sus calorías, incluyendo su constructor y getters. Supongamos que tenemos una lista de recetas llamadarecetas. Se pide implementar las siguientes consultas en Java:- Recetas de menos de 500 calorías
- Nombres de las recetas de "carnes", ordenadas alfabéticamente
- Media de calorías de las recetas de "verduras"
- Cuántas recetas hay de más de 800 calorías
-
Usando los streams de Java, que están muy relacionados con las expresiones lambda, debes crear una lista de 1000 números enteros aleatorios entre -5000 y 5000 y a partir de dicha lista vamos a imprimir por pantalla:
- El máximo de los números pares.
- El mínimo de los números múltiplos de 3.
- El total de números negativos.
- El total de números primos.
- El máximo número primo.
-
Paquete
GranjaDAM, crea una claseAnimalcon los siguientes atributos, constructor con todos los atributos, getters y setters:- String especie
- String genero
- String raza
- String alimentacion
- float peso
- String color
- boolean tienePelo
Crea una clase
Granjala cual contendrá unList<Animal>con los animales que posee. Crea también los métodos siguientes:void nuevoAnimal (Animal a)int contarAnimalesDeRaza(String raza)Map<String, Integer> contarAnimalesPorGenero()List<String> especiesConPeso (float pesoMin, float pesoMax)Map<String, List<Animal>> agruparPorAlimentacion ()DoubleSummaryStatistics resumenPesoConPelo (boolean tienePelo)
-
Paquete
Clase. Crear una claseAlumnocon los atributos típicos de un alumno (nombre, fecha de nacimiento, dni, nia, teléfono, email, nota) y los correspondientes getters y setters (y constructor).Crea una clase
Aulala cual contendrá unList<Alumno>con los alumnos que van a un aula determinada. Crea también los métodos siguientes:int contarAlumnosMayoresQue (int edad)float edadMedia ()List<String> nombreSuspendidos ()void listadoPorNiaDescendente ()boolean encontarAlumnosDelMismoMesQue (Alumno a)
-
Paquete
Olimpiada. A partir de las siguientes clases...classDiagram Participantes --o Disciplina class Participantes{ - String dni - String nombre - String origen - LocalDate fecha_nacimiento - int disciplina + Participantes() + getters() + setters() } class Disciplina{ - int id - String nombre + Disciplina() + getters() + setters() }se pide:
- Obtener la lista de todos los participantes junto con el nombre de la disciplina en la que participarán (los participantes de una misma disciplina se tienen que mostrar juntos).
- Obtener una lista de todas las disciplinas que no tengan participantes.
- Calcular la edad media de todos los participantes agrupada por disciplinas.
- Obtener las disciplinas con los participantes más joven y más viejo.