【问题标题】:Convert if/else to ternary operator Java将 if/else 转换为三元运算符 Java
【发布时间】:2021-03-17 09:19:28
【问题描述】:

我的函数 setA() 如下所示:

public double setA(){
    double a;
    
    aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());

    //a = aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());

    //return aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());

    /*if(aField.getText() == null || aField.getText().trim().isEmpty())
        a = 1;
    else
       a = Double.parseDouble(aField.getText());*/
   
    return a;
}

我想摆脱 if/else 并用三元运算符重写它。 这 3 个三元选项都不起作用,并且在构建时,它们显示相同的错误:

java: 意外类型 必需:变量 找到:值

同时注释的 if/else 块工作得很好。 将 TextField aField 传递给函数并完成此操作。在构建之前没有帮助 + 我看到了

变量“a”可能尚未初始化

错在哪里?

【问题讨论】:

    标签: java if-statement conditional-operator


    【解决方案1】:

    您的三元尝试的问题是它们在语法方面没有得到纠正:

    //a = aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());
    

    对于 Java 语言规范 (§15.25):

    15.25。条件运算符 ? :

    条件运算符 ? : 使用一个表达式的布尔值 来决定应该评估其他两个表达式中的哪一个。

    条件表达式: 条件或表达式 条件或表达式?表达式:条件表达式

    所以在您的情况下,如果conditional expression 为真 : 'a' 的值如果 @987654324 为真,则为 =(条件表达式)? 值 'a' @ 是假的;

    a = aField.getText() == null || aField.getText().trim().isEmpty() 
      ? 1 
      : Double.parseDouble(aField.getText());
    

    【讨论】:

      【解决方案2】:

      看起来很不错,除了你设置avariable的方式。

      double a = <condition> ? <true> : <false>:
      

      您还可以使用Apache utils 来简化代码。

      import org.apache.commons.lang3.StringUtils;
      
      public double setA() {
          return StringUtils.isBlank(aField.getText()) ? 1 : Double.parseDouble(aField.getText());
      }
      
      public double setA() {
          String str = aField.getText();
          return str == null || str.trim().isEmpty() ? 1 : Double.parseDouble(str.trim());
      }
      

      【讨论】:

        【解决方案3】:

        试试这个:

        a = (aField.getText() == null || aField.getText().trim().isEmpty())
         ? 1.0 : Double.parseDouble(aField.getText());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-22
          • 1970-01-01
          • 2021-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-11
          • 2018-10-25
          相关资源
          最近更新 更多