Skip to content

Commit edb2de4

Browse files
authored
Merge pull request #8708 from LdPC999/soluciones-fundamentos
#3 - Java
2 parents 100533a + 8720bac commit edb2de4

File tree

1 file changed

+278
-0
lines changed

1 file changed

+278
-0
lines changed
Lines changed: 278 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,278 @@
1+
package fundamentos;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.HashMap;
6+
import java.util.HashSet;
7+
import java.util.Map;
8+
import java.util.Scanner;
9+
import java.util.TreeMap;
10+
import java.util.TreeSet;
11+
12+
public class Clase03 {
13+
/*
14+
* CLASE 03 - ESTRUCTURAS DE DATOS
15+
*
16+
* EJERCICIO
17+
*
18+
* - Muestra ejemplos de creación de todas las estructuras soportadas por
19+
* defecto en tu lenguaje. - Utiliza operaciones de inserción, borrado,
20+
* actualización y ordenación.
21+
*
22+
* EXTRA
23+
*
24+
* Crea una agenda de contactos por terminal. - Debes implementar
25+
* funcionalidades de búsqueda, inserción, actualización y eliminación de
26+
* contactos. - Cada contacto debe tener un nombre y un número de teléfono. - El
27+
* programa solicita en primer lugar cuál es la operación que se quiere
28+
* realizar, y a continuación los datos necesarios para llevarla a cabo. - El
29+
* programa no puede dejar introducir números de teléfono no numéricos y con más
30+
* de 11 dígitos. - También se debe proponer una operación de finalización del
31+
* programa.
32+
*/
33+
34+
// EXTRA
35+
public static final int MAX_DIGITS = 11;
36+
public static Map<String, String> contactos = new HashMap<>();
37+
38+
public static void extra() {
39+
Scanner sc = new Scanner(System.in);
40+
boolean on = true;
41+
42+
System.out.println("------ Bienvenido a la Agenda ------");
43+
44+
while (on) {
45+
System.out.println("Menu: \n");
46+
System.out.println("Insertar contacto - Pulse 1");
47+
System.out.println("Buscar contacto - Pulse 2");
48+
System.out.println("Actualizar contacto - Pulse 3");
49+
System.out.println("Eliminar contacto - Pulse 4");
50+
System.out.println("Mostrar todos los contactos - Pulse 5");
51+
System.out.println("Salir - Pulse 6\n");
52+
System.out.println("Seleccione una opción");
53+
54+
String option = sc.nextLine();
55+
56+
switch (option) {
57+
case "1":
58+
insertarContacto(sc);
59+
break;
60+
case "2":
61+
buscarContacto(sc);
62+
break;
63+
case "3":
64+
actualizarContacto(sc);
65+
break;
66+
case "4":
67+
eliminarContacto(sc);
68+
break;
69+
case "5":
70+
mostrarTodos();
71+
break;
72+
case "6":
73+
on = false;
74+
System.out.println("Hasta pronto");
75+
break;
76+
default:
77+
System.out.println("Opción no válida");
78+
79+
}
80+
}
81+
82+
sc.close();
83+
}
84+
85+
public static void insertarContacto(Scanner sc) {
86+
System.out.println("Introduzca el nombre del contacto: ");
87+
String nombre = sc.nextLine().trim();
88+
89+
if (contactos.containsKey(nombre)) {
90+
System.out.println("El contacto introducido ya existe");
91+
return;
92+
} else {
93+
94+
String telefono = "";
95+
while (true) {
96+
System.out.println("Introduzca el número de teléfono. (Escriba salir para volver al menú");
97+
telefono = sc.nextLine().trim();
98+
99+
if (telefono.equalsIgnoreCase("salir")) {
100+
System.out.println("Volviendo al menú");
101+
return;
102+
}
103+
104+
if (isValid(telefono)) {
105+
contactos.put(nombre, telefono);
106+
System.out.println("Contacto guardado correctamente");
107+
break;
108+
} else {
109+
System.out.println("Número no válido. Máximo 11 dígitos");
110+
}
111+
}
112+
113+
}
114+
}
115+
116+
public static void buscarContacto(Scanner sc) {
117+
System.out.println("Introduzca el nombre del contacto");
118+
String nombre = sc.nextLine().trim();
119+
120+
if (contactos.containsKey(nombre)) {
121+
System.out.println("Contacto encontrado: " + nombre + " -> " + contactos.get(nombre));
122+
123+
} else {
124+
System.out.println("Contacto no encontrado");
125+
}
126+
}
127+
128+
public static void actualizarContacto(Scanner sc) {
129+
System.out.println("Introduzca el nombre del contacto a actualizar");
130+
String nombre = sc.nextLine().trim();
131+
132+
if (contactos.containsKey(nombre)) {
133+
String telNuevo = "";
134+
while (true) {
135+
System.out.println(
136+
"Introduzca el nuevo número. Máximo 11 dígitos (Escribe salir para cancelar y volver al menú)");
137+
telNuevo = sc.nextLine().trim();
138+
139+
if (telNuevo.equalsIgnoreCase("salir")) {
140+
System.out.println("Volviendo al menu");
141+
return;
142+
}
143+
144+
if (isValid(telNuevo)) {
145+
contactos.put(nombre, telNuevo);
146+
System.out.println("Contacto actualizado");
147+
break;
148+
} else {
149+
System.out.println("Número de teléfono no válido. Máximo 11 dígitos");
150+
151+
}
152+
}
153+
} else {
154+
System.out.println("Contacto no encontrado");
155+
}
156+
}
157+
158+
public static void eliminarContacto(Scanner sc) {
159+
System.out.println("Introduzca el nombre del contacto");
160+
String nombre = sc.nextLine().trim();
161+
162+
if (contactos.containsKey(nombre)) {
163+
contactos.remove(nombre);
164+
System.out.println("Contacto eliminado correctamente");
165+
} else {
166+
System.out.println("Contacto no encontrado");
167+
}
168+
}
169+
170+
public static void mostrarTodos() {
171+
if (contactos.isEmpty()) {
172+
System.out.println("La agenda está vacía");
173+
} else {
174+
System.out.println("Lista de contactos");
175+
contactos.forEach((nombre, telefono) -> System.out.println(nombre + " -> " + telefono));
176+
}
177+
}
178+
179+
public static boolean isValid(String telefono) {
180+
return telefono.matches("\\d{1," + MAX_DIGITS + "}");
181+
}
182+
183+
public static void main(String[] args) {
184+
185+
// ESTRUCTURAS DE DATOS - Formas de almacenar y organizar datos
186+
187+
// 1.- ArrayList - Es un array redimensionable al que añadimos elementos y
188+
// accedemos a ellos por índices.
189+
// Creación new ArrayList<String>();
190+
ArrayList<String> nombres = new ArrayList<>();
191+
192+
// Inserción - .add("");
193+
// Si lo queremos en alguna posición concreta .add(0,"");
194+
nombres.add("Luis");
195+
nombres.add("Pepe");
196+
nombres.add("Juan");
197+
nombres.add("Javier");
198+
nombres.add(0, "Álvaro");
199+
nombres.add("Alvaro");
200+
201+
// Eliminación - .remove(index o elemento);
202+
nombres.remove(3);
203+
nombres.remove("Javier");
204+
205+
// Actualizar - .set(0, elemento); Machacamos uno por otro
206+
nombres.set(0, "LoL");
207+
System.out.println("ArrayList: " + nombres);
208+
209+
// Ordenar - Collections.sort(ArrayList)
210+
// Para orden inverso Collections.reverseOrder()
211+
Collections.sort(nombres);
212+
213+
System.out.println("ArrayList: " + nombres);
214+
215+
// 2.- HashSet
216+
/*
217+
* Set no admita duplicados HashSet no es ordenado (Para eso TreeSet o
218+
* LinkedHashSet)
219+
*/
220+
221+
// Creación - HashSet<String> xxxx = new HashSet<String>();
222+
HashSet<String> mySet = new HashSet<>();
223+
224+
// Insertar - .add()
225+
mySet.add("Luis");
226+
mySet.add("Wuizi");
227+
mySet.add("36");
228+
mySet.add("LoL");
229+
mySet.add("Wuizi"); // Aunque lo añada dos veces no lo duplica
230+
231+
// Eliminar - .remove();
232+
mySet.remove("LoL");
233+
234+
// Ordenación - No se puede, tendríamos que usar TreeSet
235+
TreeSet<String> myTreeSet = new TreeSet<>();
236+
myTreeSet.add("Wuizi");
237+
myTreeSet.add("Luis");
238+
myTreeSet.add("36");
239+
myTreeSet.add("LoL");
240+
System.out.println("TreeSet: " + myTreeSet);
241+
242+
System.out.println("HashSet: " + mySet);
243+
244+
// 3.- HashMap - Diccionario clave - valor (key/value)
245+
246+
// Creación
247+
HashMap<String, String> capitalesPaises = new HashMap<>();
248+
249+
// Inserción - .put(key, value)
250+
capitalesPaises.put("Inglaterra", "Londres");
251+
capitalesPaises.put("España", "Madrid");
252+
capitalesPaises.put("Francia", "Paris");
253+
capitalesPaises.put("Italia", "Turín");
254+
System.out.println("HashMap antes de actualizar: " + capitalesPaises);
255+
256+
// Eliminar - .remove(Key);
257+
capitalesPaises.remove("Inglaterra");
258+
259+
// Actualizar - .put(Key, value) Machacamos el valor de una clave
260+
capitalesPaises.put("Italia", "Roma");
261+
262+
System.out.println("HashMap después de actualizar: " + capitalesPaises);
263+
264+
// Ordenar - Hash no se puede ordenar, hay que usar Tree
265+
TreeMap<String, String> capitalesPaisesTree = new TreeMap<>();
266+
267+
capitalesPaisesTree.put("Inglaterra", "Londres");
268+
capitalesPaisesTree.put("España", "Madrid");
269+
capitalesPaisesTree.put("Francia", "Paris");
270+
271+
System.out.println("TreeMap: " + capitalesPaisesTree);
272+
273+
// EXTRA
274+
extra();
275+
276+
}
277+
278+
}

0 commit comments

Comments
 (0)