Programming
Examen unidades 4 y 5
Enunciado
Implementa el método
private static void eliminarAcogido().
Este método:
Solicitará el nombre de un acogido por teclado.
Utilizará el método private static int buscarAcogido(String nombreAcogido) para encontrar la posición del array acogidos[] en la que se encuentra el acogido con ese nombre. *Ten en cuenta que el método buscarAcogido() ya está implementado.
La eliminación del acogido se producirá desplazando hacia la izquierda todos los acogidos que se hayan almacenado a partir de la posición devuelta por el método anterior.
antes de eliminar a A3
después de eliminar a A3
A1
A2
A3
A4
A5
A1
A2
A4
A5
null
- La variable
numAcogidosdeberá decrementarse por cada acogido eliminado del array.
Solución
package acogimientos;
import java.util.Iterator;
import java.util.Scanner;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Objects;
public class Acogimientos {
private static final int NUMERO_ACOGIDOS = 5;
static String[] acogidos = new String[NUMERO_ACOGIDOS];
static int numAcogidos = 0;
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
LinkedList familiasAcogida = new LinkedList();
LinkedHashMap acogimientos = new LinkedHashMap();
int opcion;
do {
opcion = imprimirMenu();
switch (opcion) {
case 1:
nuevoAcogido(); break;
case 2:
eliminarAcogido(); break;
case 3:
listarAcogidos(); break;
case 4:
nuevaFamiliaAcogida(familiasAcogida); break;
case 5:
eliminarFamiliaAcogida(familiasAcogida); break;
case 6:
listarFamiliasAcogida(familiasAcogida); break;
case 7:
insertarAcogimiento(acogimientos, familiasAcogida); break;
case 8:
disolverAcogimiento(acogimientos); break;
case 9:
imprimirAcogimientos(acogimientos, familiasAcogida);
}
} while (opcion != 0);
familiasAcogida.clear();
}
private static void nuevoAcogido() {
System.out.println("NUEVO ACOGIDO");
System.out.println("-------------");
System.out.print("Nombre del acogido: ");
try {
acogidos[numAcogidos++] = sc.nextLine();
} catch (ArrayIndexOutOfBoundsException ex) {
System.out.println("ERROR: En estos momentos, no hay capacidad para otra acogida");
}
}
private static void eliminarAcogido() {
System.out.println("ELIMINAR ACOGIDO");
System.out.println("----------------");
System.out.print("Nombre del acogido: ");
String nombreAcogido = sc.nextLine();
int indiceAcogido = buscarAcogido(nombreAcogido);
if (indiceAcogido >= 0) {
while (indiceAcogido < acogidos.length && acogidos[indiceAcogido]!= null ) {
if (indiceAcogido < acogidos.length - 1) {
acogidos[indiceAcogido] = acogidos[indiceAcogido + 1];
}
indiceAcogido++;
}
acogidos[indiceAcogido - 1] = null;
System.out.println("Acogido eliminado de la lista.");
} else {
System.out.println("ERROR: El acogido no existe");
}
}
private static void listarAcogidos() {
System.out.println("LISTAR ACOGIDOS");
System.out.println("-------------------");
for (int i = 0; i < acogidos.length && acogidos[i]!= null ; i++) {
System.out.print(acogidos[i] + "_-_");
}
System.out.println("");
}
private static void nuevaFamiliaAcogida(LinkedList familias) {
System.out.println("NUEVA FAMILIA DE ACOGIDA");
System.out.println("------------------------");
System.out.print("Nombre del tutor: ");
String nombreTutor = sc.nextLine();
System.out.print("Municipio: ");
String municipio = sc.nextLine();
System.out.println("Numero maximo de acogidas: ");
int plazas = Integer.parseInt(sc.nextLine());
try {
familias.add(new FamiliaAcogida(nombreTutor, municipio, plazas));
} catch(IllegalArgumentException iae) {
System.out.println("Las plazas deben estar entre 1 y 5.");
}
}
private static void eliminarFamiliaAcogida(LinkedList familias) {
System.out.println("ELIMINAR FAMILIA DE ACOGIDA");
System.out.println("---------------------------");
System.out.print("Nombre del tutor: ");
String nombreTutor = sc.nextLine();
FamiliaAcogida familiaParaBorrar = buscarFamilia(familias, nombreTutor);
if(familiaParaBorrar != null) {
familias.remove(familiaParaBorrar);
}
}
private static void listarFamiliasAcogida(LinkedList familias) {
System.out.println("LISTAR FAMILIAS DE ACOGIDA");
System.out.println("-------------------");
for (FamiliaAcogida familia : familias) {
System.out.println(familia);
}
}
private static void insertarAcogimiento(LinkedHashMap acogimientos, LinkedList familias) {
System.out.println("INSERTAR ACOGIMIENTO");
System.out.println("--------------------");
System.out.print("Nombre del acogido: ");
boolean acogimientoRealizado = false;
String nombreAcogido = sc.nextLine();
int indiceAcogido = buscarAcogido(nombreAcogido);
if (indiceAcogido >= 0) {
System.out.print("Nombre del tutor: ");
String nombreTutor = sc.nextLine();
FamiliaAcogida familiaAcogida = buscarFamilia(familias, nombreTutor);
if (familiaAcogida != null) {
try {
acogimientoRealizado = familiaAcogida.acoger(acogimientos, acogidos[indiceAcogido]);
} catch (Exception ex) {
System.out.println("ERROR: La familia no tiene plazas libres");
}
}
}
if(!acogimientoRealizado) {
System.out.println("El acogimiento no se ha podido tramitar.");
}
}
private static void disolverAcogimiento(LinkedHashMap acogimientos) {
System.out.println("ELIMINAR ACOGIMIENTO");
System.out.println("--------------------");
boolean disolucionRealizada = false;
System.out.println("Nombre del acogido: ");
String nombreAcogido = sc.nextLine();
FamiliaAcogida familiaAcogida = acogimientos.remove(nombreAcogido);
if (familiaAcogida != null) {
familiaAcogida.setNumPlazasAcogida(familiaAcogida.getNumPlazasAcogida() + 1);
}
}
private static void imprimirAcogimientos(LinkedHashMap acogimientos, LinkedList familias) {
for (String acogido: acogidos) {
FamiliaAcogida familia = acogimientos.get(acogido);
if(familia != null) {
System.out.println(acogido + " - " + familia);
}
}
}
private static void imprimirAcogimientosBidimensional(LinkedHashMap acogimientos, LinkedList familias) {
char[][] matrizAcogimientos = new char[acogidos.length][familias.size()];
System.out.println("IMPRIMIR ACOGIMIENTOS");
System.out.println("---------------------");
for (int i = 0; i < acogidos.length ; i++) {
if (acogimientos.containsKey(acogidos[i])) {
FamiliaAcogida familiaAcogida = acogimientos.get(acogidos[i]);
int j = familias.indexOf(familiaAcogida);
if(j >= 0) {
matrizAcogimientos[i][j] = 'X';
}
}
}
System.out.print("\t\t");
for (int j = 0; j < familias.size(); j++) {
System.out.print(familias.get(j) + "\t");
}
System.out.println("");
for (int i = 0; i < acogidos.length; i++) {
System.out.print(acogidos[i] + "\t");
for (int j = 0; j < familias.size(); j++) {
System.out.print("\t" + matrizAcogimientos[i][j] + "\t");
}
System.out.println("");
}
}
private static FamiliaAcogida buscarFamilia(LinkedList familias, String nombreTutor) {
FamiliaAcogida familiaBuscada = null;
for (FamiliaAcogida familia : familias) {
if (familia.getNombreTutor().equals(nombreTutor)) {
familiaBuscada = familia;
}
}
return familiaBuscada;
}
private static int buscarAcogido(String nombreAcogido) {
int indiceEncontrado = -1;
var i = 0;
while (indiceEncontrado < 0 && i < acogidos.length && acogidos[i] != null) {
if (acogidos[i].equals(nombreAcogido)) {
indiceEncontrado = i;
} else {
i++;
}
}
return indiceEncontrado;
}
public static int imprimirMenu() {
int opcion;
do {
System.out.println("0. Salir");
System.out.println("GESTIONAR ACOGIDOS");
System.out.println("--------------------");
System.out.println("\t1. Nuevo acogido");
System.out.println("\t2. Eliminar acogido");
System.out.println("\t3. Listar acogidos");
System.out.print("Elija una opcion: ");
opcion = sc.nextInt();
System.out.println();
} while (opcion < 0 || opcion > 9);
sc.nextLine();
return opcion;
}
}
class FamiliaAcogida {
private String nombreTutor;
private String municipio;
private int numPlazasAcogida;
public FamiliaAcogida(String nombreTutor, String municipio, int numPlazasAcogida) {
if(numPlazasAcogida <= 0 || numPlazasAcogida > 5) throw new IllegalArgumentException();
this.nombreTutor = nombreTutor;
this.municipio = municipio;
this.numPlazasAcogida = numPlazasAcogida;
}
public String getNombreTutor() {
return nombreTutor;
}
public int getNumPlazasAcogida() {
return numPlazasAcogida;
}
public void setNumPlazasAcogida(int numPlazasAcogida) {
this.numPlazasAcogida = numPlazasAcogida;
}
public boolean acoger(LinkedHashMap acogimientos, String nombreAcogido) {
if(this.numPlazasAcogida <= 0) {
throw new IllegalArgumentException();
}
acogimientos.put(nombreAcogido, this);
this.setNumPlazasAcogida(this.getNumPlazasAcogida() - 1);
return true;
}
@Override
public String toString() {
return nombreTutor + "(" + municipio + "):" + numPlazasAcogida;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof FamiliaAcogida)) {
return false;
}
FamiliaAcogida c = (FamiliaAcogida) obj;
return this.nombreTutor.equals(c.nombreTutor);
}
}
Input
1 a1 1 a2 1 a3 1 a4 1 a5 1 a6 2 a2 3 0
1 a2 1 a1 1 a4 1 a5 1 a3 1 a6 2 a3 3 0
Output
0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: ERROR: En estos momentos, no hay capacidad para otra acogida 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: ELIMINAR ACOGIDO ---------------- Nombre del acogido: Acogido eliminado de la lista. 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: LISTAR ACOGIDOS ------------------- a1_-_a3_-_a4_-_a5_-_ 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion:
0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: ERROR: En estos momentos, no hay capacidad para otra acogida 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: ELIMINAR ACOGIDO ---------------- Nombre del acogido: Acogido eliminado de la lista. 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion: LISTAR ACOGIDOS ------------------- a2_-_a1_-_a4_-_a5_-_ 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos Elija una opcion:

