有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

eclipse在Java中执行If和Elseif语句之间的代码

我得到了这个密码:

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的值,除非我在两个else if语句之间设置了conditionXYZ的值

我在SO上发现的唯一其他类似问题是this one,它建议使用两个if语句。问题是如果conditionY为真,我不希望对conditionXYZ进行计算

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

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

有什么想法吗

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    我知道这很古老,但鉴于没有人给出我的答案,我想我会发布我的答案,以防其他人在这里寻找选择

    The problem is I don't want conditionXYZ to be evaluated if conditionY is true.

    在计算if/else语句上方的conditionXYZ之前,可以使用三元运算符检查conditionX和conditionY是否为false

    //Evaluates xyzPOJO only if conditionX and conditionY aren't true, otherwise set xyzPOJO to null
    XYZPojo xyzPOJO = conditionX==false && conditionY==false ? getXYZPOJO() : null;
    
    if (conditionX) {
        doX();
    }
    else if (conditionY) {
        boolean isSomethingTrue = findOutIfSomethingIsTrue();
        if (anotherConditionIsTrue) {
            doY();
        }
    }
    else if (xyzPOJO.getValueX().contains("xyz")) {
        doXYZ();
    }
    
  2. # 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();
    }