在Java中执行If和Else-if语句之间的代码

时间:2017-12-25 18:54:57

标签: java eclipse if-statement

我收到了这段代码:

if (conditionX) {

                    doX();
                }



else if (conditionY) {
                    boolean isSomethingTrue = findOutIfSomethingIsTrue();
                    if (anotherConditionIsTrue) {
                        doY();
                    }
                }

XYZPojo xyzPOJO = getXYZPOJO();    

else if (xyzPOJO.getValueX().contains("xyz")) {  // <- eclipse wants me to delete this 'else' statement

                    doXYZ();

                }

当我运行此代码时,eclipse会抱怨"Syntax error on token "else", delete this token"。我理解这是因为我有代码:

boolean conditionXYZ = checkIfXYZIsTrue();
两个else if语句之间的

。但我无法检查conditionXYZ的值,除非我在两个conditionXYZ语句之间设置else if的值。

我在SO上找到的唯一其他类似问题是this one,它建议使用两个if语句。问题是如果conditionXYZ为真,我不希望评估conditionY

我的另一个选择是使用两个if statements并为每个if语句添加一个return语句。但我发现这个解决方案在代码设计方面并不优雅。

在执行任何if语句之前,我的第三个选项是checkIfXYZIsTrue(),但这效率不高,因为如果conditionY为真,我们不需要检查conditionXYZ

有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

Java语法不允许您在if / else链之间使用语句(不在各自的块中)。

您可以在else if条件下执行第三个条件:

if (conditionX) {
    doX();
} else if (conditionY) {
    boolean isSomethingTrue = findOutIfSomethingIsTrue();
    if (anotherConditionIsTrue) {
        doY();
    }
} else {
    XYZPojo xyzPOJO = getXYZPOJO();
    if (xyzPOJO.getValueX().contains("xyz")) {
        doXYZ();
    }
    //reuse xyzPOJO
}

或者,最后的else仍然可以是:

} else if (getXYZPOJO().getValueX().contains("xyz")){
    doXYZ();
}

答案 1 :(得分:0)

我知道这已经很老了,但看到没有人给出我想要的答案,我想我会发布我的答案,以防其他人在这里寻找选项。

<块引用>

问题是我不希望在 conditionY 为真时对 conditionXYZ 进行评估。

在评估 if/else 语句上方的 conditionXYZ 之前,您可以使用三元运算符来检查 conditionY 是否为假。

//Sets xyzPOJO to getXYZPOJO() if conditionY isn't true, otherwise set xyzPOJO to null
XYZPojo xyzPOJO = conditionY!=true ? getXYZPOJO() : null;

if (conditionX) {
    doX();
}
else if (conditionY) {
    boolean isSomethingTrue = findOutIfSomethingIsTrue();
    if (anotherConditionIsTrue) {
        doY();
    }
}
else if (xyzPOJO.getValueX().contains("xyz")) {
    doXYZ();
}