Ejercicios Capitulo 7 bloque 4

This commit is contained in:
2025-01-24 23:06:30 +01:00
parent 905014d150
commit ace5b8314a
5 changed files with 219 additions and 0 deletions

View File

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

View File

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

View File

@@ -0,0 +1,87 @@
package capitulo07.bloque04.listener;
import java.util.ArrayList;
import java.util.List;
public class Calculadora {
static List<OperacionesListener> listeners = new ArrayList<OperacionesListener>();
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);
}
}
}

View File

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

View File

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