将if/else转换为三值运算符java

eblbsuwk  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(398)

我的函数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”可能尚未初始化
怎么了?

pzfprimi

pzfprimi1#

试试这个:

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

r8uurelv2#

看起来很好,除了一件事你是怎么设置的 a 变量。

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());
}
mitkmikd

mitkmikd3#

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

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

对于java语言规范(§15.25):
15.25. 条件运算符?:
条件运算符?:使用一个表达式的布尔值来决定应计算其他两个表达式中的哪一个。
ConditionalRexpression:ConditionalRexpression ConditionalRexpression?表达式:条件表达式
那么在你的例子中是一个=(条件表达式)?“a”的值,如果 conditional expression 为真:如果 conditional expression 是假的;

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

相关问题