es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Expresión aritmética de Java FX en un botón

Hola, quiero hacer un botón que tome dos campos de entrada y que intente hacer lo siguiente:
1) Verificar si es un número (para poder dividir los dos números).
2) No puedo dividir cualquier número por cero.
Y mostrar que es una expresión aritmética. ¿Alguna ayuda?
El código es el siguiente:
ver imagen aquí

Código:

b4.setOnMouseClicked((MouseEvent ex) -> {
    String Num1 = tf4.getText();
    String Num2 = tf8.getText();

    if (Num1.matches("^\\d+(\\.\\d+)?") && Num2.matches("^\\d+(\\.\\d+)?")) {
        try {
            double Num1f = Double.parseDouble(Num1);
            double Num2f = Double.parseDouble(Num2);
            double result = (Num2f / Num1f);
            valf4.setText(String.valueOf(result));
        } catch (ArithmeticException e) {
            System.out.println("ArithmeticException");
            valf4.setText("¡No puedes hacer eso!");
        }
    } else {
    }
});

Y muestra infinito, no lo que esperaba como hice en la sección catch.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el código está intentando dividir Num2f entre Num1f, lo cual puede resultar en infinito si Num1f es cero. Para evitar esto, puedes agregar una comprobación adicional para ver si Num1f es igual a cero antes de realizar la división:

    if (Num1.matches("^\\d+(\\.\\d+)?") && Num2.matches("^\\d+(\\.\\d+)?")) {
        try {
            double Num1f = Double.parseDouble(Num1);
            double Num2f = Double.parseDouble(Num2);
    
            if (Num1f == 0) {
                valf4.setText("¡No puedes dividir por cero!");
            } else {
                double result = Num2f / Num1f;
                valf4.setText(String.valueOf(result));
            }
        } catch (NumberFormatException e) {
            valf4.setText("Por favor ingresa números válidos");
        }
    } else {
        valf4.setText("Por favor ingresa números válidos");
    }
    

    Este código primero verifica si ambos campos de entrada contienen números válidos (enteros positivos o negativos, o decimales). Si lo hacen, luego intenta convertirlos en variables double. Si una de las variables no se puede convertir en double (por ejemplo, si el usuario ingresa letras en lugar de números), capturará la NumberFormatException y mostrará un mensaje de error.
    Si ambas variables son válidas, luego verificará si Num1f es cero. Si es cero, mostrará un mensaje de error. De lo contrario, realizará la división y mostrará el resultado.

Comments are closed.