feat(test 20250221): solved

This commit is contained in:
Rafa Muñoz
2025-02-24 13:09:16 +01:00
parent 8eba8ca7e3
commit 3f082aa864
15 changed files with 551 additions and 5 deletions

View File

@@ -6,6 +6,7 @@
</attributes>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="librerias/Driver_MySQL_Connector_J/mysql-connector-java-8.0.19.jar"/>
<classpathentry kind="lib" path="librerias/EclipseLink2.5.2/jlib/jpa/javax.persistence_2.1.0.v201304241213.jar"/>
<classpathentry kind="lib" path="librerias/EclipseLink2.5.2/jlib/jpa/org.eclipse.persistence.jpa.modelgen_2.5.2.v20140319-9ad6abd.jar"/>
<classpathentry kind="lib" path="librerias/EclipseLink2.5.2/jlib/jpa/org.eclipse.persistence.jpars_2.5.2.v20140319-9ad6abd.jar"/>
@@ -16,10 +17,9 @@
<classpathentry kind="lib" path="librerias/EclipseLink2.5.2/jlib/moxy/javax.xml.bind_2.2.0.v201105210648.jar"/>
<classpathentry kind="lib" path="librerias/EclipseLink2.5.2/jlib/moxy/javax.xml.stream_1.0.1.v201004272200.jar"/>
<classpathentry kind="lib" path="librerias/EclipseLink2.5.2/jlib/eclipselink.jar"/>
<classpathentry kind="lib" path="librerias/mongoDB-Java-driver/mongo-java-driver-3.12.12.jar"/>
<classpathentry kind="lib" path="librerias/Jackson/jackson-annotations-2.9.0.jar"/>
<classpathentry kind="lib" path="librerias/Jackson/jackson-core-2.9.5.jar"/>
<classpathentry kind="lib" path="librerias/Jackson/jackson-databind-2.9.5.jar"/>
<classpathentry kind="lib" path="librerias/Driver_MySQL_Connector_J/mysql-connector-java-8.0.19.jar"/>
<classpathentry kind="lib" path="librerias/mongoDB-Java-driver/mongo-java-driver-3.12.12.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@@ -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.

View File

@@ -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");

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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<String, Producto> hmProductos =
new HashMap<String, Producto>();
/**
*
* @param args
*/
public static void main(String[] args) {
int opcion;
List<Producto> 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<Producto> ordenaHashMapProductos() {
List<Producto> l = new ArrayList<Producto>(hmProductos.values());
Collections.sort(l, new Comparator<Producto>() {
@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;
}
}

View File

@@ -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 + "]";
}
}

View File

@@ -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<String, FrecuenciaLetra> hmFrecuenciaLetras =
new HashMap<String, FrecuenciaLetra>();
/**
*
* @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<FrecuenciaLetra> 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<FrecuenciaLetra> ordenaHashMapFrecuencias() {
List<FrecuenciaLetra> l =
new ArrayList<FrecuenciaLetra>(hmFrecuenciaLetras.values());
Collections.sort(l, new Comparator<FrecuenciaLetra>() {
@Override
public int compare(FrecuenciaLetra f1, FrecuenciaLetra f2) {
return f2.getFrecuencia() - f1.getFrecuencia();
}
});
return l;
}
}

View File

@@ -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 + "]";
}
}

View File

@@ -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());
}
}

View File

@@ -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
}
}

View File

@@ -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<SameNumberListener> listeners =
new ArrayList<SameNumberListener>();
/**
*
*/
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();
}
}
}

View File

@@ -0,0 +1,6 @@
package tutorialJava.examenes.examen20250221.ejercicioD;
public interface SameNumberListener {
public void sameNumbers(SameNumbersEvent e);
}

View File

@@ -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 + "]";
}
}

View File

@@ -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());
}
}