【问题标题】:Java FX arithmetic expression in a button按钮中的 Java FX 算术表达式
【发布时间】:2022-01-07 16:41:05
【问题描述】:

嗨,我想做一个带有两个输入字段的按钮并尝试执行以下操作:

  1. chick 如果它是一个数字。(所以它可以分开两个数字)
  2. 我不能将任何数字除以零。 并表明它是一个算术表达式。 所以有什么帮助吗? 代码很糟糕:: enter image description here

代码::

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("You can't do that !");
    }
} else {
    
}

});

它显示无穷大 不像我在捕捞区所做的那样

【问题讨论】:

  • 问题是什么?
  • 它应该可以工作,但它显示无限
  • 不是我想在捕获区展示的内容
  • 请遵守 java 命名约定

标签: java exception javafx


【解决方案1】:

Java 中的浮点运算不会引发除以零的异常;它计算为 Double 类(Double.POSITIVE_INFINITYDouble.NEGATIVE_INFINITY)中的特殊值之一。

您可以只测试分母是否为零,或者测试结果是否无限,而不是捕获异常:

b4.setOnMouseClicked((MouseEvent ex) -> {

    String num1 = tf4.getText();
    String num2 = tf8.getText();
    
    
    if(num1.matches("^\\d+(\\.\\d+)?") && num2.matches("^\\d+(\\.\\d+)?")) {
        
        
        double num1f = Double.parseDouble(num1);
        double num2f = Double.parseDouble(num2);
        double result = num2f / num1f;
        
        if (Double.isInfinite(result)) { 
            valf4.setText("You can't do that !");
        } else {
            valf4.setText(String.valueOf(result));
        }
    } else {
        
    }

});

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 2011-01-25
    • 2011-01-31
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多