diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 591ca52..7931985 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,19 +4,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -60,7 +61,7 @@
"dart.analysis.tool.window.visible": "false",
"git-widget-placeholder": "main",
"kotlin-language-version-configured": "true",
- "last_opened_file_path": "/Users/h4ckx0r/IdeaProjects/ExamenesProgramacion/src/main/java/examenes/examen20250131/ejercicio04",
+ "last_opened_file_path": "/Users/h4ckx0r/IdeaProjects/ExamenesProgramacion/src/main/java/examenes/examen20250221/ejercicio04",
"onboarding.tips.debug.path": "/Users/h4ckx0r/IdeaProjects/ExamenesProgramacion/src/main/java/net/h4ckx0r/Main.java",
"settings.editor.selected.configurable": "preferences.pluginManager",
"show.migrate.to.gradle.popup": "false"
@@ -68,9 +69,11 @@
}]]>
+
+
@@ -181,7 +184,15 @@
1734091528594
-
+
+
+ 1738328024100
+
+
+
+ 1738328024100
+
+
@@ -208,6 +219,7 @@
-
+
+
\ No newline at end of file
diff --git a/src/main/java/examenes/examen20250221/ejercicio01/Main.java b/src/main/java/examenes/examen20250221/ejercicio01/Main.java
new file mode 100644
index 0000000..f1f565c
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio01/Main.java
@@ -0,0 +1,63 @@
+package examenes.examen20250221.ejercicio01;
+
+import examenes.examen20250221.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class Main {
+ public static void main(String[] args) {
+ HashMap productos = new HashMap<>();
+ int opcion;
+
+ productos.put("Cocacola", new Producto(1,"Cocacola", 1));
+ productos.put("Pepsi", new Producto(1,"Pepsi", 1.2));
+ productos.put("Galletas", new Producto(1,"Galletas", 0.8));
+ productos.put("Chicles", new Producto(1,"Chicles", 0.25));
+
+ do {
+ System.out.println("Seleccione lo que desea hacer:\n" +
+ "0. Salir\n" +
+ "1. Introducir productos\n" +
+ "2. Mostrar producto más barato\n" +
+ "3. Mostrar productos ordenados de más caro a más barato");
+
+ opcion = Utils.solicitarIntScannerInline("> ");
+ switch (opcion) {
+ case 1:
+ Producto productoNuevo = new Producto(
+ Utils.solicitarIntScannerInline("Introduzca el código del producto: "),
+ Utils.solicitarStringScannerInline("Introduzca el nombre del producto: "),
+ Utils.solicitarDoubleScannerInline("Introduzca el precio del producto: ")
+ );
+ productos.put(productoNuevo.getNombre(), productoNuevo);
+
+ break;
+ case 2:
+ List listaProductosPrimerItem = new ArrayList<>();
+ for (Object producto : productos.values().toArray()) {
+ listaProductosPrimerItem.add((Producto) producto);
+ }
+ listaProductosPrimerItem = Utils.ordenarBurbujaProductosPorPrecio(listaProductosPrimerItem);
+
+ System.out.println(listaProductosPrimerItem.getLast());
+ break;
+ case 3:
+ List listaProductos = new ArrayList<>();
+ for (Object producto : productos.values().toArray()) {
+ listaProductos.add((Producto) producto);
+ }
+ listaProductos = Utils.ordenarBurbujaProductosPorPrecio(listaProductos);
+
+ for (Producto p : listaProductos) {
+ System.out.println(p.toString());
+ }
+ break;
+
+ }
+ } while (opcion != 0);
+
+
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio01/Producto.java b/src/main/java/examenes/examen20250221/ejercicio01/Producto.java
new file mode 100644
index 0000000..4d7f596
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio01/Producto.java
@@ -0,0 +1,46 @@
+package examenes.examen20250221.ejercicio01;
+
+public class Producto {
+ private int codigo;
+ private String nombre;
+ private double precio;
+
+ public Producto(int codigo, String nombre, double precio) {
+ this.codigo = codigo;
+ this.nombre = nombre;
+ this.precio = precio;
+ }
+
+ public int getCodigo() {
+ return codigo;
+ }
+
+ public void setCodigo(int codigo) {
+ this.codigo = codigo;
+ }
+
+ public String getNombre() {
+ return nombre;
+ }
+
+ public void setNombre(String nombre) {
+ this.nombre = nombre;
+ }
+
+ public double getPrecio() {
+ return precio;
+ }
+
+ public void setPrecio(double precio) {
+ this.precio = precio;
+ }
+
+ @Override
+ public String toString() {
+ return "Producto{" +
+ "codigo=" + codigo +
+ ", nombre='" + nombre + '\'' +
+ ", precio=" + precio +
+ '}';
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio02/Letra.java b/src/main/java/examenes/examen20250221/ejercicio02/Letra.java
new file mode 100644
index 0000000..f0ebf84
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio02/Letra.java
@@ -0,0 +1,31 @@
+package examenes.examen20250221.ejercicio02;
+
+public class Letra {
+ private Character letra;
+ private Integer conteoLetra;
+
+ public Letra(Character letra, Integer conteoLetra) {
+ this.letra = letra;
+ this.conteoLetra = conteoLetra;
+ }
+
+ public Integer getConteoLetra() {
+ return conteoLetra;
+ }
+
+ public void setConteoLetra(Integer conteoLetra) {
+ this.conteoLetra = conteoLetra;
+ }
+
+ public void sumaConteo() {
+ this.conteoLetra++;
+ }
+
+ public Character getLetra() {
+ return letra;
+ }
+
+ public void setLetra(Character letra) {
+ this.letra = letra;
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio02/Main.java b/src/main/java/examenes/examen20250221/ejercicio02/Main.java
new file mode 100644
index 0000000..d8cd66b
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio02/Main.java
@@ -0,0 +1,55 @@
+package examenes.examen20250221.ejercicio02;
+
+import examenes.examen20250221.ejercicio01.Producto;
+import examenes.examen20250221.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class Main {
+ public static void main(String[] args) {
+ String linea = Utils.solicitarStringScannerInline("Introduzca la línea a analizar: ").toLowerCase();
+
+ HashMap letras = new HashMap<>();
+ int numDigitos = 0;
+ int numEspacios = 0;
+ int numOtros = 0;
+ int numLetras = 0;
+
+ for (Character c : linea.toCharArray()) {
+ if (Character.isLetter(c)) {
+ Letra conteoLetra = letras.get(c);
+ if (conteoLetra == null) {
+ letras.put(c, new Letra(c, 1));
+ } else {
+ letras.get(c).sumaConteo();
+ }
+ numLetras++;
+ } else if (Character.isDigit(c)) {
+ numDigitos++;
+ } else if (Character.isSpaceChar(c)) {
+ numEspacios++;
+ } else {
+ numOtros++;
+ }
+ }
+
+ List listaLetras = new ArrayList<>();
+ for (Object producto : letras.values().toArray()) {
+ listaLetras.add((Letra) producto);
+ }
+
+ listaLetras = Utils.ordenarBurbujaLetras(listaLetras);
+
+
+ System.out.println("La línea de texto tiene " + numLetras + " letras.");
+ System.out.println("La línea de texto tiene " + numDigitos + " digitos.");
+ System.out.println("La línea de texto tiene " + numEspacios + " espacios.");
+ System.out.println("La línea de texto tiene " + numOtros + " otros caracteres.");
+
+ for (int i = 0; i < 3; i++) {
+ System.out.println("La " + (i + 1) + "ª letra más frecuente es la: " + listaLetras.get(i).getLetra());
+ }
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio03/Main.java b/src/main/java/examenes/examen20250221/ejercicio03/Main.java
new file mode 100644
index 0000000..405d1ce
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio03/Main.java
@@ -0,0 +1,36 @@
+package examenes.examen20250221.ejercicio03;
+
+import examenes.examen20250221.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+ public static void main(String[] args) {
+ List prestamos = new ArrayList<>();
+ int opcion;
+
+ do {
+ System.out.println("Seleccione lo que desea hacer:\n" +
+ "0. Salir\n" +
+ "1. Coger prestado un libro");
+
+ opcion = Utils.solicitarIntScannerInline("> ");
+ switch (opcion) {
+ case 1:
+ Prestamo nuevoPrestamo = new Prestamo(
+ Utils.solicitarFechaInline("dd/MM/yyyy"),
+ Utils.solicitarIntScannerInline("Introduzca el código de usuario: "),
+ Utils.solicitarIntScannerInline("Introduzca el ISBN del libro: "),
+ Utils.solicitarIntScannerInline("Escriba 1 si es un libro de alta demanda o 0 si es demanda normal: ") == 1);
+
+ prestamos.add(nuevoPrestamo);
+ System.out.println("\n\nTendrás que devolver el libro el " + nuevoPrestamo.getFechaEntrega());
+ break;
+
+ }
+ } while (opcion != 0);
+
+
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio03/Prestamo.java b/src/main/java/examenes/examen20250221/ejercicio03/Prestamo.java
new file mode 100644
index 0000000..3975ecb
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio03/Prestamo.java
@@ -0,0 +1,95 @@
+package examenes.examen20250221.ejercicio03;
+
+import java.util.Calendar;
+import java.util.Date;
+
+public class Prestamo {
+ private static final int DIAS_LIBRO_NORMAL = 15;
+ private static final int DIAS_LIBRO_ALTA_DEMANDA = 7;
+
+ private Date fechaComienzo;
+ private Date fechaEntrega;
+
+ private int codUser;
+ private int isbnLibro;
+
+ private boolean altaDemanda;
+
+ public Prestamo(Date fechaComienzo, int codUser, int isbnLibro, boolean altaDemanda) {
+ this.fechaComienzo = fechaComienzo;
+ this.codUser = codUser;
+ this.isbnLibro = isbnLibro;
+ this.altaDemanda = altaDemanda;
+
+ long fechaEntrega;
+
+ if (altaDemanda) {
+ fechaEntrega = fechaComienzo.getTime() + (DIAS_LIBRO_ALTA_DEMANDA * 24 * 60 * 60 * 1000);
+ } else {
+ fechaEntrega = fechaComienzo.getTime() + (DIAS_LIBRO_NORMAL * 24 * 60 * 60 * 1000);
+ }
+
+ Calendar calendarEntrega = Calendar.getInstance();
+ calendarEntrega.setTimeInMillis(fechaEntrega);
+
+ if (calendarEntrega.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
+ fechaEntrega += (24 * 60 * 60 * 1000);
+ } else if (calendarEntrega.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
+ fechaEntrega += (2 * 24 * 60 * 60 * 1000);
+ }
+
+ this.fechaEntrega = new Date(fechaEntrega);
+
+ }
+
+ public Date getFechaComienzo() {
+ return fechaComienzo;
+ }
+
+ public void setFechaComienzo(Date fechaComienzo) {
+ this.fechaComienzo = fechaComienzo;
+ }
+
+ public Date getFechaEntrega() {
+ return fechaEntrega;
+ }
+
+ public void setFechaEntrega(Date fechaEntrega) {
+ this.fechaEntrega = fechaEntrega;
+ }
+
+ public int getCodUser() {
+ return codUser;
+ }
+
+ public void setCodUser(int codUser) {
+ this.codUser = codUser;
+ }
+
+ public int getIsbnLibro() {
+ return isbnLibro;
+ }
+
+ public void setIsbnLibro(int isbnLibro) {
+ this.isbnLibro = isbnLibro;
+ }
+
+ public boolean isAltaDemanda() {
+ return altaDemanda;
+ }
+
+ public void setAltaDemanda(boolean altaDemanda) {
+ this.altaDemanda = altaDemanda;
+ }
+
+ @Override
+ public String toString() {
+ return "Prestamo{" +
+ "fechaComienzo=" + fechaComienzo +
+ ", fechaEntrega=" + fechaEntrega +
+ ", codUser=" + codUser +
+ ", isbnLibro=" + isbnLibro +
+ ", altaDemanda=" + altaDemanda +
+ '}';
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio04/Main.java b/src/main/java/examenes/examen20250221/ejercicio04/Main.java
new file mode 100644
index 0000000..2a61096
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio04/Main.java
@@ -0,0 +1,16 @@
+package examenes.examen20250221.ejercicio04;
+
+import examenes.examen20250221.ejercicio04.listener.CheckeadorNums;
+
+public class Main {
+ public static void main(String[] args) {
+ new Matematico();
+ while (true) {
+ try {
+ CheckeadorNums.solicitarNumMayor100();
+ } catch (NumeroMenor100Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio04/Matematico.java b/src/main/java/examenes/examen20250221/ejercicio04/Matematico.java
new file mode 100644
index 0000000..1a6f25d
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio04/Matematico.java
@@ -0,0 +1,17 @@
+package examenes.examen20250221.ejercicio04;
+
+
+import examenes.examen20250221.ejercicio04.listener.CheckeadorNums;
+import examenes.examen20250221.ejercicio04.listener.NumRepetidoEvent;
+import examenes.examen20250221.ejercicio04.listener.NumsListener;
+
+public class Matematico implements NumsListener {
+ public Matematico() {
+ CheckeadorNums.addNumRepetidoListener(this);
+ }
+
+ @Override
+ public void numeroRepetido(NumRepetidoEvent event) {
+ System.out.println("Soy un Matematico y me he dado cuenta de que has repetido el número " + event.getNumero());
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio04/NumeroMenor100Exception.java b/src/main/java/examenes/examen20250221/ejercicio04/NumeroMenor100Exception.java
new file mode 100644
index 0000000..cfb8004
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio04/NumeroMenor100Exception.java
@@ -0,0 +1,7 @@
+package examenes.examen20250221.ejercicio04;
+
+public class NumeroMenor100Exception extends Exception {
+ public NumeroMenor100Exception(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio04/listener/CheckeadorNums.java b/src/main/java/examenes/examen20250221/ejercicio04/listener/CheckeadorNums.java
new file mode 100644
index 0000000..dab3d6d
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio04/listener/CheckeadorNums.java
@@ -0,0 +1,35 @@
+package examenes.examen20250221.ejercicio04.listener;
+
+import examenes.examen20250221.ejercicio04.NumeroMenor100Exception;
+import examenes.examen20250221.utils.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CheckeadorNums {
+ private static int numAnterior;
+ static List listeners = new ArrayList();
+
+ public static void addNumRepetidoListener(NumsListener l) {
+ listeners.add(l);
+ }
+
+ public static void removeNumRepetidoListener(NumsListener l) {
+ listeners.remove(l);
+ }
+
+ private static void fireNumRepetido(int resultado) {
+ for (NumsListener opl : listeners) {
+ opl.numeroRepetido(new NumRepetidoEvent(resultado));
+ }
+ }
+
+
+ public static int solicitarNumMayor100() throws NumeroMenor100Exception {
+ int num = Utils.solicitarIntScannerInline("Introduzca un número igual o mayor que 100: ");
+ if (num < 100) throw new NumeroMenor100Exception("El número " + num + " es menor de 100.");
+ if (numAnterior == num) fireNumRepetido(num);
+ numAnterior = num;
+ return num;
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio04/listener/NumRepetidoEvent.java b/src/main/java/examenes/examen20250221/ejercicio04/listener/NumRepetidoEvent.java
new file mode 100644
index 0000000..1a016a8
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio04/listener/NumRepetidoEvent.java
@@ -0,0 +1,24 @@
+package examenes.examen20250221.ejercicio04.listener;
+
+public class NumRepetidoEvent {
+ private int numero;
+
+ public NumRepetidoEvent(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+
+ public void setNumero(int numero) {
+ this.numero = numero;
+ }
+
+ @Override
+ public String toString() {
+ return "NumRepetidoEvent{" +
+ "numero=" + numero +
+ '}';
+ }
+}
diff --git a/src/main/java/examenes/examen20250221/ejercicio04/listener/NumsListener.java b/src/main/java/examenes/examen20250221/ejercicio04/listener/NumsListener.java
new file mode 100644
index 0000000..ce2e0f8
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/ejercicio04/listener/NumsListener.java
@@ -0,0 +1,6 @@
+package examenes.examen20250221.ejercicio04.listener;
+
+public interface NumsListener {
+
+ public void numeroRepetido(NumRepetidoEvent event);
+}
diff --git a/src/main/java/examenes/examen20250221/utils/Utils.java b/src/main/java/examenes/examen20250221/utils/Utils.java
new file mode 100644
index 0000000..817d3e7
--- /dev/null
+++ b/src/main/java/examenes/examen20250221/utils/Utils.java
@@ -0,0 +1,79 @@
+package examenes.examen20250221.utils;
+
+import examenes.examen20250221.ejercicio01.Producto;
+import examenes.examen20250221.ejercicio02.Letra;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Scanner;
+
+public class Utils {
+ public static int solicitarIntScannerInline(String pregunta) {
+ System.out.print(pregunta);
+ Scanner sc = new Scanner(System.in);
+ return sc.nextInt();
+ }
+
+ public static String solicitarStringScannerInline(String pregunta) {
+ System.out.print(pregunta);
+ Scanner sc = new Scanner(System.in);
+ return sc.nextLine();
+ }
+
+ public static double solicitarDoubleScannerInline(String pregunta) {
+ System.out.print(pregunta);
+ Scanner sc = new Scanner(System.in);
+ return sc.nextDouble();
+ }
+
+ public static List ordenarBurbujaProductosPorPrecio(List lista) {
+ boolean ordenando;
+ do {
+ ordenando = false;
+ for (int i = 0; i < lista.size(); i++) {
+ if (i != (lista.size() - 1) && lista.get(i).getPrecio() < lista.get(i + 1).getPrecio()) {
+ Producto elementoTemporal = lista.get(i);
+ lista.set(i, lista.get(i + 1));
+ lista.set(i + 1, elementoTemporal);
+ ordenando = true;
+ }
+ }
+ } while (ordenando);
+ return lista;
+ }
+
+ public static List ordenarBurbujaLetras(List lista) {
+ boolean ordenando;
+ do {
+ ordenando = false;
+ for (int i = 0; i < lista.size(); i++) {
+ if (i != (lista.size() - 1) && lista.get(i).getConteoLetra() < lista.get(i + 1).getConteoLetra()) {
+ Letra elementoTemporal = lista.get(i);
+ lista.set(i, lista.get(i + 1));
+ lista.set(i + 1, elementoTemporal);
+ ordenando = true;
+ }
+ }
+ } while (ordenando);
+ return lista;
+ }
+
+ public static Date solicitarFechaInline(String formato) {
+
+ Scanner sc = new Scanner(System.in);
+ SimpleDateFormat formatoFecha = new SimpleDateFormat(formato);
+
+ while (true) {
+ System.out.print("Introduzca una fecha con este formato ( " + formato + " ) > ");
+ String fechaIntroducida = sc.nextLine();
+
+ try {
+ return formatoFecha.parse(fechaIntroducida);
+ } catch (ParseException e) {
+ System.out.println("\nVuelva a introducir la fecha, en el formato correcto: " + formato);
+ }
+ }
+ }
+}