diff --git a/.classpath b/.classpath
index 8f3c9ae..eb4425c 100644
--- a/.classpath
+++ b/.classpath
@@ -6,6 +6,7 @@
+
@@ -16,10 +17,9 @@
-
-
+
diff --git a/src/tutorialJava/Utils.java b/src/tutorialJava/Utils.java
index e761e0f..0b4e397 100644
--- a/src/tutorialJava/Utils.java
+++ b/src/tutorialJava/Utils.java
@@ -132,6 +132,23 @@ public class Utils {
}
+ /**
+ * Obtiene un número entero a través de un objeto Scanner
+ * @return Número entero introducido por el usuario.
+ */
+ public static double obtenerDoublePorScanner(String mensaje) {
+ System.out.println(mensaje);
+ return obtenerDoublePorScanner();
+ }
+
+ /**
+ * Obtiene un número entero a través de un objeto Scanner
+ * @return Número entero introducido por el usuario.
+ */
+ public static float obtenerFloatPorScanner(String mensaje) {
+ return (float) obtenerDoublePorScanner(mensaje);
+ }
+
/**
* Obtiene un número entero a través de un JOptionPane
* @return Número entero introducido a través de un JOptionPane.
diff --git a/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo01_ConexionBasica.java b/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo01_ConexionBasica.java
index 0e632c5..b8005ed 100644
--- a/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo01_ConexionBasica.java
+++ b/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo01_ConexionBasica.java
@@ -20,8 +20,9 @@ public class Ejemplo01_ConexionBasica {
// Necesitamos obtener un acceso a la BBDD, eso se materializa en un objeto de tipo Connection, al cual
// le tenemos que pasar los parámetros de conexión.
- Connection conexion = (Connection) DriverManager.getConnection (
- "jdbc:mysql://localhost:3307/tutorialjavacoches?serverTimezone=UTC",
+ Connection conexion =
+ (Connection) DriverManager.getConnection (
+ "jdbc:mysql://localhost:3310/tutorialjavacoches?serverTimezone=UTC",
"root", "1234");
diff --git a/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo02_EjemplosInsertUpdateyDelete.java b/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo02_EjemplosInsertUpdateyDelete.java
index bd87cd1..0ffcf0f 100644
--- a/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo02_EjemplosInsertUpdateyDelete.java
+++ b/src/tutorialJava/capitulo8_Acceso_A_Datos/mysql/Ejemplo02_EjemplosInsertUpdateyDelete.java
@@ -81,7 +81,8 @@ public class Ejemplo02_EjemplosInsertUpdateyDelete {
Statement s = (Statement) conn.createStatement();
- int filasAfectadas = s.executeUpdate("update tutorialjavacoches.concesionario "
+ int filasAfectadas = s.executeUpdate(
+ "update tutorialjavacoches.concesionario "
+ "set nombre = '" + nombreMod + "', "
+ "localidad = '" + localidadMod + "'\r\n"
+ "where id = " + id);
diff --git a/src/tutorialJava/examenes/examen20250221/EjercicioC.java b/src/tutorialJava/examenes/examen20250221/EjercicioC.java
new file mode 100644
index 0000000..1a19db3
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/EjercicioC.java
@@ -0,0 +1,65 @@
+package tutorialJava.examenes.examen20250221;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import tutorialJava.Utils;
+
+public class EjercicioC {
+
+ private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
+
+ /**
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ try {
+ Date fechaDevolucion = pideFecha();
+ int tipoDemanda = Utils.obtenerEnteroConDescripcion(
+ "Tipo de demanda (1.- normal - 2.- alta):");
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(fechaDevolucion);
+
+ // Calcula la fecha de devolución
+ if (tipoDemanda == 1) cal.add(Calendar.DAY_OF_YEAR, 15);
+ else cal.add(Calendar.DAY_OF_YEAR, 7); // Alta demanda
+
+ if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)
+ cal.add(Calendar.DAY_OF_YEAR, 2);
+ else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
+ cal.add(Calendar.DAY_OF_YEAR, 1);
+
+ // Muestra fecha devolución
+ Date dateDevolucion = new Date(cal.getTimeInMillis());
+ System.out.println("Fecha devolución: " + sdf.format(dateDevolucion));
+
+ }
+ catch (Exception e) {
+ System.out.println("Fecha inválida");
+ }
+
+ }
+
+ /**
+ *
+ * @return
+ * @throws Exception
+ */
+ private static Date pideFecha() throws Exception {
+ String strFecha =
+ Utils.obtenerCadenaConDescripcion("Dame la fecha de préstamo dd/MM/yyyy:");
+ return sdf.parse(strFecha);
+ }
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioA/Principal.java b/src/tutorialJava/examenes/examen20250221/ejercicioA/Principal.java
new file mode 100644
index 0000000..ee23a2d
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioA/Principal.java
@@ -0,0 +1,115 @@
+package tutorialJava.examenes.examen20250221.ejercicioA;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Scanner;
+
+import tutorialJava.Utils;
+
+public class Principal {
+
+ private static HashMap hmProductos =
+ new HashMap();
+
+ /**
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ int opcion;
+ List l;
+
+ incorporaDatosMock();
+
+ do {
+ opcion = muestraMenu();
+
+ switch (opcion) {
+ case 1: // Nuevo producto
+ Producto p = new Producto(
+ Utils.obtenerCadenaConDescripcion("Dame código del producto: "),
+ Utils.obtenerCadenaConDescripcion("Dame un nombre: "),
+ Utils.obtenerFloatPorScanner("Dame el precio: ")
+ );
+ hmProductos.put(p.getCodigo(), p);
+ break;
+ case 2: // Obtengo el más barato
+ l = ordenaHashMapProductos();
+ System.out.println("El más barato es: " +
+ l.get(l.size() - 1).toString());
+ break;
+ case 3: // Ordenar de caro a barato
+ System.out.println("Elementos ordenados");
+ l = ordenaHashMapProductos();
+ for (Producto producto : l) {
+ System.out.println(producto);
+ }
+ break;
+ }
+
+ } while (opcion != 0);
+
+ }
+
+
+
+ /*
+ *
+ */
+ public static int muestraMenu() {
+ Scanner sc = new Scanner(System.in);
+ System.out.println("\n\nMenú" +
+ "\n0.- Salir" +
+ "\n1.- Introducir producto" +
+ "\n2.- Producto más barato" +
+ "\n3.- Productos ordenados de caro a barato" +
+ "\n\tIntroduzca su opción: ");
+ return Integer.parseInt(sc.next());
+ }
+
+ /**
+ *
+ */
+ private static void incorporaDatosMock() {
+ hmProductos.put("111", new Producto("111", "Azúcar", 1.5f));
+ hmProductos.put("222", new Producto("222", "Leche", 0.9f));
+ hmProductos.put("333", new Producto("333", "Arroz", 1f));
+ }
+
+ /**
+ *
+ * @return
+ */
+ private static List ordenaHashMapProductos() {
+ List l = new ArrayList(hmProductos.values());
+ Collections.sort(l, new Comparator() {
+ @Override
+ public int compare(Producto p1, Producto p2) {
+ if (p1.getPrecio() < p2.getPrecio()) return 1;
+ else if (p1.getPrecio() > p2.getPrecio()) return -1;
+ else return 0;
+ }
+ });
+ return l;
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioA/Producto.java b/src/tutorialJava/examenes/examen20250221/ejercicioA/Producto.java
new file mode 100644
index 0000000..d8fa02d
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioA/Producto.java
@@ -0,0 +1,46 @@
+package tutorialJava.examenes.examen20250221.ejercicioA;
+
+public class Producto {
+
+ private String codigo;
+ private String nombre;
+ private float precio;
+
+ public Producto(String codigo, String nombre, float precio) {
+ super();
+ this.codigo = codigo;
+ this.nombre = nombre;
+ this.precio = precio;
+ }
+
+ public String getCodigo() {
+ return codigo;
+ }
+
+ public void setCodigo(String codigo) {
+ this.codigo = codigo;
+ }
+
+ public String getNombre() {
+ return nombre;
+ }
+
+ public void setNombre(String nombre) {
+ this.nombre = nombre;
+ }
+
+ public float getPrecio() {
+ return precio;
+ }
+
+ public void setPrecio(float precio) {
+ this.precio = precio;
+ }
+
+ @Override
+ public String toString() {
+ return "Producto [codigo=" + codigo + ", nombre=" + nombre + ", precio=" + precio + "]";
+ }
+
+
+}
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioB/EjercicioB.java b/src/tutorialJava/examenes/examen20250221/ejercicioB/EjercicioB.java
new file mode 100644
index 0000000..525bd0c
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioB/EjercicioB.java
@@ -0,0 +1,104 @@
+package tutorialJava.examenes.examen20250221.ejercicioB;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+import tutorialJava.Utils;
+import tutorialJava.examenes.examen20250221.ejercicioA.Producto;
+
+public class EjercicioB {
+
+ private static HashMap hmFrecuenciaLetras =
+ new HashMap();
+
+ /**
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ String frase = Utils.obtenerCadenaConDescripcion("Dame la frase: ");
+ int contLetras = 0, contDigitos = 0, contEspacios = 0,
+ contOtros = 0;
+
+
+ for (int i = 0; i < frase.length(); i++) {
+ if (Character.isLetter(frase.charAt(i))) {
+ contLetras++;
+ procesaLetra(frase.charAt(i));
+ }
+ else if (Character.isDigit(frase.charAt(i))) contDigitos++;
+ else if (Character.isWhitespace(frase.charAt(i))) contEspacios++;
+ else contOtros++;
+ }
+
+ // Imprimo resultados
+ System.out.println("Letras: " + contLetras + " - "
+ + "dígitos: " + contDigitos + " - "
+ + "espacios: " + contEspacios + " - "
+ + "otros: " + contOtros);
+
+ // Muestro las frecuencias
+ List l = ordenaHashMapFrecuencias();
+ if (l.size() > 0) {
+ System.out.println("Letra más frecuente: " +
+ l.get(0).getLetra() + " - " + l.get(0).getFrecuencia());
+ }
+ if (l.size() > 1) {
+ System.out.println("Letra más frecuente: " +
+ l.get(1).getLetra() + " - " + l.get(1).getFrecuencia());
+ }
+ if (l.size() > 2) {
+ System.out.println("Letra más frecuente: " +
+ l.get(2).getLetra() + " - " + l.get(2).getFrecuencia());
+ }
+ }
+
+ /**
+ *
+ * @param letra
+ */
+ private static void procesaLetra(char letra) {
+ if (hmFrecuenciaLetras.get("" + letra) == null) {
+ hmFrecuenciaLetras.put("" + letra,
+ new FrecuenciaLetra(letra, 1));
+ }
+ else { // Ya existe un objeto guardado para esa letra
+ hmFrecuenciaLetras.get("" + letra).addFrecuencia(1);
+ }
+ }
+
+
+ /**
+ *
+ * @return
+ */
+ private static List ordenaHashMapFrecuencias() {
+ List l =
+ new ArrayList(hmFrecuenciaLetras.values());
+
+ Collections.sort(l, new Comparator() {
+ @Override
+ public int compare(FrecuenciaLetra f1, FrecuenciaLetra f2) {
+ return f2.getFrecuencia() - f1.getFrecuencia();
+ }
+ });
+ return l;
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioB/FrecuenciaLetra.java b/src/tutorialJava/examenes/examen20250221/ejercicioB/FrecuenciaLetra.java
new file mode 100644
index 0000000..fe45353
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioB/FrecuenciaLetra.java
@@ -0,0 +1,43 @@
+package tutorialJava.examenes.examen20250221.ejercicioB;
+
+public class FrecuenciaLetra {
+ private char letra;
+ private int frecuencia;
+
+ public FrecuenciaLetra() {
+ super();
+ }
+
+ public FrecuenciaLetra(char letra, int frecuencia) {
+ super();
+ this.letra = letra;
+ this.frecuencia = frecuencia;
+ }
+
+ public char getLetra() {
+ return letra;
+ }
+
+ public void setLetra(char letra) {
+ this.letra = letra;
+ }
+
+ public int getFrecuencia() {
+ return frecuencia;
+ }
+
+ public void setFrecuencia(int frecuencia) {
+ this.frecuencia = frecuencia;
+ }
+
+ public void addFrecuencia (int aumento) {
+ this.frecuencia += aumento;
+ }
+
+ @Override
+ public String toString() {
+ return "FrecuenciaLetra [letra=" + letra + ", frecuencia=" + frecuencia + "]";
+ }
+
+
+}
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioD/Mesa.java b/src/tutorialJava/examenes/examen20250221/ejercicioD/Mesa.java
new file mode 100644
index 0000000..841ee39
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioD/Mesa.java
@@ -0,0 +1,11 @@
+package tutorialJava.examenes.examen20250221.ejercicioD;
+
+public class Mesa implements SameNumberListener {
+
+ @Override
+ public void sameNumbers(SameNumbersEvent e) {
+ System.out.println("Soy una mesa y me notifican que"
+ + " hay dos números iguales: " + e.getNumber());
+ }
+
+}
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioD/NumberUnder100Exception.java b/src/tutorialJava/examenes/examen20250221/ejercicioD/NumberUnder100Exception.java
new file mode 100644
index 0000000..a112b2f
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioD/NumberUnder100Exception.java
@@ -0,0 +1,31 @@
+package tutorialJava.examenes.examen20250221.ejercicioD;
+
+public class NumberUnder100Exception extends Exception {
+
+ public NumberUnder100Exception() {
+ super();
+ // TODO Auto-generated constructor stub
+ }
+
+ public NumberUnder100Exception(String message, Throwable cause, boolean enableSuppression,
+ boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ // TODO Auto-generated constructor stub
+ }
+
+ public NumberUnder100Exception(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ public NumberUnder100Exception(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ public NumberUnder100Exception(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+}
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioD/Principal.java b/src/tutorialJava/examenes/examen20250221/ejercicioD/Principal.java
new file mode 100644
index 0000000..77d7533
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioD/Principal.java
@@ -0,0 +1,70 @@
+package tutorialJava.examenes.examen20250221.ejercicioD;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import tutorialJava.Utils;
+
+public class Principal {
+
+ private static List listeners =
+ new ArrayList();
+
+ /**
+ *
+ */
+ public static void addSameNumberListener (SameNumberListener l) {
+ listeners.add(l);
+ }
+
+ /**
+ *
+ */
+ public static void removeSameNumberListener (SameNumberListener l) {
+ listeners.remove(l);
+ }
+
+ /**
+ *
+ * @param n
+ */
+ public static void fireSameNumbers(int n) {
+ SameNumbersEvent e = new SameNumbersEvent(n);
+ for (SameNumberListener sameNumberListener : listeners) {
+ sameNumberListener.sameNumbers(e);
+ }
+ }
+ /**
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ int n = 0, anterior;
+
+ Mesa m = new Mesa();
+ addSameNumberListener(m);
+ Silla s = new Silla();
+ addSameNumberListener(s);
+
+ try {
+ do {
+ anterior = n;
+ n = Utils.obtenerEnteroConDescripcion(
+ "Dame un número igual o superior a 100:");
+
+ // Si el número < 100 lanzo una exception
+ if (n < 100) {
+ throw new NumberUnder100Exception("El número " + n +
+ " es inferior a 100. No permitido");
+ }
+ else if (n == anterior) {
+ fireSameNumbers(n);
+ }
+ } while (true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumberListener.java b/src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumberListener.java
new file mode 100644
index 0000000..8616140
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumberListener.java
@@ -0,0 +1,6 @@
+package tutorialJava.examenes.examen20250221.ejercicioD;
+
+public interface SameNumberListener {
+
+ public void sameNumbers(SameNumbersEvent e);
+}
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumbersEvent.java b/src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumbersEvent.java
new file mode 100644
index 0000000..33e9b1f
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumbersEvent.java
@@ -0,0 +1,25 @@
+package tutorialJava.examenes.examen20250221.ejercicioD;
+
+public class SameNumbersEvent {
+ private int number;
+
+ public SameNumbersEvent(int number) {
+ super();
+ this.number = number;
+ }
+
+ public int getNumber() {
+ return number;
+ }
+
+ public void setNumber(int number) {
+ this.number = number;
+ }
+
+ @Override
+ public String toString() {
+ return "SameNumbersEvent [number=" + number + "]";
+ }
+
+
+}
diff --git a/src/tutorialJava/examenes/examen20250221/ejercicioD/Silla.java b/src/tutorialJava/examenes/examen20250221/ejercicioD/Silla.java
new file mode 100644
index 0000000..e1132a8
--- /dev/null
+++ b/src/tutorialJava/examenes/examen20250221/ejercicioD/Silla.java
@@ -0,0 +1,11 @@
+package tutorialJava.examenes.examen20250221.ejercicioD;
+
+public class Silla implements SameNumberListener {
+
+ @Override
+ public void sameNumbers(SameNumbersEvent e) {
+ System.out.println("Soy una silla y me notifican que"
+ + " hay dos números iguales: " + e.getNumber());
+ }
+
+}