mirror of
https://gitlab.com/tutorial-java-rafa-munoz/tutorial-java-2024-25/tutorialjava2024-25.git
synced 2025-11-09 09:57:40 +01:00
feat(test 20250221): solved
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
65
src/tutorialJava/examenes/examen20250221/EjercicioC.java
Normal file
65
src/tutorialJava/examenes/examen20250221/EjercicioC.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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 + "]";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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 + "]";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package tutorialJava.examenes.examen20250221.ejercicioD;
|
||||
|
||||
public interface SameNumberListener {
|
||||
|
||||
public void sameNumbers(SameNumbersEvent e);
|
||||
}
|
||||
@@ -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 + "]";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user