diff --git a/src/capitulo07/bloque04/AvisosCalculo.java b/src/capitulo07/bloque04/AvisosCalculo.java new file mode 100644 index 0000000..0ed78cb --- /dev/null +++ b/src/capitulo07/bloque04/AvisosCalculo.java @@ -0,0 +1,37 @@ +package capitulo07.bloque04; + +import capitulo07.bloque04.listener.Calculadora; +import capitulo07.bloque04.listener.OperacionEvent; +import capitulo07.bloque04.listener.OperacionesListener; + +public class AvisosCalculo implements OperacionesListener { + + public AvisosCalculo() { + Calculadora.addOperationsListener(this); + } + + @Override + public void sumaMayor1000(OperacionEvent event) { + System.out.println("La suma ha sobrepasado 1000 con el valor " + event.getResultado()); + } + + @Override + public void multiplicacionMayor1000(OperacionEvent event) { + System.out.println("La multiplicación ha sobrepasado 1000 con el valor " + event.getResultado()); + } + + @Override + public void restaNegativa(OperacionEvent event) { + System.out.println("El resultado de la resta es negativo: " + event.getResultado()); + } + + @Override + public void divisor0(OperacionEvent event) { + System.out.println("No es posible dividir por 0"); + } + + @Override + public void raizNegativa(OperacionEvent event) { + System.out.println("No se puede calcular la raiz cuadrada de un número negativo"); + } +} diff --git a/src/capitulo07/bloque04/Main.java b/src/capitulo07/bloque04/Main.java new file mode 100644 index 0000000..fc041f1 --- /dev/null +++ b/src/capitulo07/bloque04/Main.java @@ -0,0 +1,57 @@ +package capitulo07.bloque04; + + +import capitulo07.bloque04.listener.Calculadora; + +import static capitulo04.utils.Utils.solicitarFloatScannerInline; +import static capitulo04.utils.Utils.solicitarIntScannerInline; + +public class Main { + public static void main(String[] args) { + int opcion = 0; + new AvisosCalculo(); + + do { + System.out.println("Calculadora (0 para salir):" + + "\n 1 - Suma" + + "\n 2 - Resta" + + "\n 3 - Multiplicación" + + "\n 4 - División" + + "\n 5 - Raiz Cuadrada"); + opcion = solicitarIntScannerInline("> "); + + float num1 = 0; + float num2 = 0; + + switch (opcion) { + case 1: + num1 = solicitarFloatScannerInline("Introduzca el primer sumando: "); + num2 = solicitarFloatScannerInline("Introduzca el segundo sumando: "); + System.out.println("Resultado de la suma: " + Calculadora.suma(num1, num2)); + break; + case 2: + num1 = solicitarFloatScannerInline("Introduzca el minuendo: "); + num2 = solicitarFloatScannerInline("Introduzca el sustraendo: "); + System.out.println("Resultado de la resta: " + Calculadora.resta(num1,num2)); + break; + case 3: + num1 = solicitarFloatScannerInline("Introduzca el primer factor: "); + num2 = solicitarFloatScannerInline("Introduzca el segundo factor: "); + System.out.println("Resultado de la multiplicación: " + Calculadora.multiplica(num1,num2)); + break; + case 4: + num1 = solicitarFloatScannerInline("Introduzca el dividendo: "); + num2 = solicitarFloatScannerInline("Introduzca el divisor: "); + System.out.println("Resultado de la división: " + Calculadora.divide(num1, num2)); + break; + case 5: + num1 = solicitarFloatScannerInline("Introduzca el radicando: "); + System.out.println("Resultado de la raiz cuadrada: " + Calculadora.hazRaizCuadrada(num1)); + break; + } + + + } while (opcion != 0); + + } +} diff --git a/src/capitulo07/bloque04/listener/Calculadora.java b/src/capitulo07/bloque04/listener/Calculadora.java new file mode 100644 index 0000000..21eb331 --- /dev/null +++ b/src/capitulo07/bloque04/listener/Calculadora.java @@ -0,0 +1,87 @@ +package capitulo07.bloque04.listener; + +import java.util.ArrayList; +import java.util.List; + +public class Calculadora { + static List listeners = new ArrayList(); + + public static void addOperationsListener(OperacionesListener l) { + listeners.add(l); + } + public static void removeOperationsListener(OperacionesListener l) { + listeners.remove(l); + } + + private static void fireSumaMayor1000(float resultado) { + for (OperacionesListener opl : listeners) { + opl.sumaMayor1000(new OperacionEvent(resultado)); + } + } + + private static void fireMultiplicacionMayor1000(float resultado) { + for (OperacionesListener opl : listeners) { + opl.multiplicacionMayor1000(new OperacionEvent(resultado)); + } + } + + private static void fireRestaNegativa(float resultado) { + for (OperacionesListener opl : listeners) { + opl.restaNegativa(new OperacionEvent(resultado)); + } + } + + private static void fireDivision0(float resultado) { + for (OperacionesListener opl : listeners) { + opl.divisor0(new OperacionEvent(resultado)); + } + } + + private static void fireRaizNegativa(float resultado) { + for (OperacionesListener opl : listeners) { + opl.raizNegativa(new OperacionEvent(resultado)); + } + } + + + + + + + + public static float suma(float num1, float num2) { + float resultado = num1 + num2; + if (resultado > 1000) fireSumaMayor1000(resultado); + return resultado; + } + + public static float multiplica(float num1, float num2) { + float resultado = num1 * num2; + if (resultado < 1000) fireMultiplicacionMayor1000(resultado); + return resultado; + } + + public static float resta(float num1, float num2) { + float resultado = num1 - num2; + if (resultado < 0) fireRestaNegativa(resultado); + return resultado; + } + + public static float divide(float num1, float num2) { + if (num2 == 0) { + fireDivision0(num2); + return num2; + } else { + return num1 / num2; + } + } + + public static float hazRaizCuadrada(float num) { + if (num < 0) { + fireRaizNegativa(num); + return num; + } else { + return (float) Math.sqrt(num); + } + } +} diff --git a/src/capitulo07/bloque04/listener/OperacionEvent.java b/src/capitulo07/bloque04/listener/OperacionEvent.java new file mode 100644 index 0000000..f675f27 --- /dev/null +++ b/src/capitulo07/bloque04/listener/OperacionEvent.java @@ -0,0 +1,24 @@ +package capitulo07.bloque04.listener; + +public class OperacionEvent { + private float resultado; + + public OperacionEvent(float resultado) { + + this.resultado = resultado; + } + public float getResultado() { + return resultado; + } + + public void setResultado(float resultado) { + this.resultado = resultado; + } + + @Override + public String toString() { + return "OperacionEvent{" + + "resultado=" + resultado + + '}'; + } +} diff --git a/src/capitulo07/bloque04/listener/OperacionesListener.java b/src/capitulo07/bloque04/listener/OperacionesListener.java new file mode 100644 index 0000000..b6e25fb --- /dev/null +++ b/src/capitulo07/bloque04/listener/OperacionesListener.java @@ -0,0 +1,14 @@ +package capitulo07.bloque04.listener; + +public interface OperacionesListener { + + public void sumaMayor1000(OperacionEvent event); + + public void multiplicacionMayor1000(OperacionEvent event); + + public void restaNegativa(OperacionEvent event); + + public void divisor0(OperacionEvent event); + + public void raizNegativa(OperacionEvent event); +}