From 3f082aa8642e22d0936bab66a3bb25eb28c71259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20Mu=C3=B1oz?= Date: Mon, 24 Feb 2025 13:09:16 +0100 Subject: [PATCH] feat(test 20250221): solved --- .classpath | 4 +- src/tutorialJava/Utils.java | 17 +++ .../mysql/Ejemplo01_ConexionBasica.java | 5 +- ...Ejemplo02_EjemplosInsertUpdateyDelete.java | 3 +- .../examenes/examen20250221/EjercicioC.java | 65 ++++++++++ .../examen20250221/ejercicioA/Principal.java | 115 ++++++++++++++++++ .../examen20250221/ejercicioA/Producto.java | 46 +++++++ .../examen20250221/ejercicioB/EjercicioB.java | 104 ++++++++++++++++ .../ejercicioB/FrecuenciaLetra.java | 43 +++++++ .../examen20250221/ejercicioD/Mesa.java | 11 ++ .../ejercicioD/NumberUnder100Exception.java | 31 +++++ .../examen20250221/ejercicioD/Principal.java | 70 +++++++++++ .../ejercicioD/SameNumberListener.java | 6 + .../ejercicioD/SameNumbersEvent.java | 25 ++++ .../examen20250221/ejercicioD/Silla.java | 11 ++ 15 files changed, 551 insertions(+), 5 deletions(-) create mode 100644 src/tutorialJava/examenes/examen20250221/EjercicioC.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioA/Principal.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioA/Producto.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioB/EjercicioB.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioB/FrecuenciaLetra.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioD/Mesa.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioD/NumberUnder100Exception.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioD/Principal.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumberListener.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioD/SameNumbersEvent.java create mode 100644 src/tutorialJava/examenes/examen20250221/ejercicioD/Silla.java 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()); + } + +}