Programming

Examen unidades 4 y 5

Enunciado

El método imprimirAcogimientosBidimensional() genera un array bidimensional en el que pone una ‘X’ en las parejas que se han formado entre un acogido y una familia. Al final del método se debería imprimir el contenido de este array pero se ha eliminado el bucle que realiza esa impresión. Haz que se visualice el contenido de ese array bidimensional, en el que el contenido de cada posición del array irá precedido y sucedido por un ‘\t’.
Haz que la opción 9 del menú invoque a este método en lugar de a
imprimirAcogimientos().

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: imprimirAcogimientosBidimensional(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.println("GESTIONAR FAMILIAS DE ACOGIDA"); System.out.println("--------------------"); System.out.println("\t4. Nueva familia de acogida"); System.out.println("\t5. Eliminar familia de acogida"); System.out.println("\t6. Listar familias de acogida"); System.out.println("GESTIONAR ACOGIMIENTOS"); System.out.println("--------------------"); System.out.println("\t7. Insertar acogimiento"); System.out.println("\t8. Disolver acogimiento"); System.out.println("\t9. Imprimir acogimientos"); 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 4 t1 m1 1 4 t2 m2 2 7 a1 t1 7 a2 t2 7 a3 t2 8 a2 9 0
1 a1 1 a2 1 a3 4 t1 m1 1 4 t2 m2 2 7 a1 t1 7 a2 t2 7 a3 t2 8 a3 9 0

Output

0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: ELIMINAR ACOGIMIENTO -------------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: IMPRIMIR ACOGIMIENTOS --------------------- t1(m1):0 t2(m2):1 a1 X a2 a3 X null null 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion:
0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVO ACOGIDO ------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: NUEVA FAMILIA DE ACOGIDA ------------------------ Nombre del tutor: Municipio: Numero maximo de acogidas: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: INSERTAR ACOGIMIENTO -------------------- Nombre del acogido: Nombre del tutor: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: ELIMINAR ACOGIMIENTO -------------------- Nombre del acogido: 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: IMPRIMIR ACOGIMIENTOS --------------------- t1(m1):0 t2(m2):1 a1 X a2 X a3 null null 0. Salir GESTIONAR ACOGIDOS -------------------- 1. Nuevo acogido 2. Eliminar acogido 3. Listar acogidos GESTIONAR FAMILIAS DE ACOGIDA -------------------- 4. Nueva familia de acogida 5. Eliminar familia de acogida 6. Listar familias de acogida GESTIONAR ACOGIMIENTOS -------------------- 7. Insertar acogimiento 8. Disolver acogimiento 9. Imprimir acogimientos Elija una opcion: