Java嵌套If / Else条件

时间:2015-10-26 05:02:38

标签: java if-statement

我有一系列的8"淘汰赛#34;如果语句必须传递以显示适当的响应。如果这8个if语句中的任何一个失败,则会显示相应的响应。以下是我的代码......

 if (ageCustInt >= ageMinComp1Int && ageCustInt <= ageMaxComp1Int){
            if(adtV1MileageCustInt >= adtVMileageMinComp1Int && adtV2MileageCustInt >= adtVMileageMinComp1Int && adtV3MileageCustInt >= adtVMileageMinComp1Int &&
               adtV1MileageCustInt <= adtVMileageMaxComp1Int && adtV2MileageCustInt <= adtVMileageMaxComp1Int && adtV3MileageCustInt <= adtVMileageMaxComp1Int)
                if(totalViolationsCustInt >= totalViolationsMinComp1Int && totalViolationsCustInt <= totalViolationsMaxComp1Int)
                    if(totalAdtDriversCustInt >= adtDriversMinComp1Int && totalAdtDriversCustInt <= adtDriversMaxComp1Int)
                        if(bodilyInjuryCust.equals(bodilyInjuryComp1))
                            if(propDamageCust.equals(propDamageComp1))
                                if(currentInsur.equals(presInsurKOComp1) || presInsurKOComp1.equals("Both"))
                                    if(unUiBodilyCust.equals(unUiBodilyComp1))
                                    {
                                    btnComp1.setVisible(true);
                                    lblPriceComp1.setText("$ " + price1String);
                                    lblPriceComp1.setVisible(true);
                                    }
        } else
        {
            lblPriceComp1.setText("Not Competitive");
        }

我得到了大部分正确的结果,但偶尔会出现适当的&#34;没有竞争力的&#34; else块的结果没有显示出来。我的猜测是因为else语句只适用于第一个if语句,如果传递的话,则不会执行else块。我需要构造我的if语句,这样如果任何if语句都失败了,else块就会执行。我尝试重组我的块没有成功。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

根据其他人的建议,使用If chaining concept,使用&&,将所有条件合并为一个if block

最简单的可能就在下面。

boolean isValid = false;

     if (ageCustInt >= ageMinComp1Int && ageCustInt <= ageMaxComp1Int){
                if(adtV1MileageCustInt >= adtVMileageMinComp1Int && adtV2MileageCustInt >= adtVMileageMinComp1Int && adtV3MileageCustInt >= adtVMileageMinComp1Int &&
                   adtV1MileageCustInt <= adtVMileageMaxComp1Int && adtV2MileageCustInt <= adtVMileageMaxComp1Int && adtV3MileageCustInt <= adtVMileageMaxComp1Int)
                    if(totalViolationsCustInt >= totalViolationsMinComp1Int && totalViolationsCustInt <= totalViolationsMaxComp1Int)
                        if(totalAdtDriversCustInt >= adtDriversMinComp1Int && totalAdtDriversCustInt <= adtDriversMaxComp1Int)
                            if(bodilyInjuryCust.equals(bodilyInjuryComp1))
                                if(propDamageCust.equals(propDamageComp1))
                                    if(currentInsur.equals(presInsurKOComp1) || presInsurKOComp1.equals("Both"))
                                        if(unUiBodilyCust.equals(unUiBodilyComp1))
                                        {
                                        btnComp1.setVisible(true);
                                        lblPriceComp1.setText("$ " + price1String);
                                        lblPriceComp1.setVisible(true);
                                        }
                                isValid  = true;
            }

//稍后检查变量值是否为真,意味着它没有在任何if语句中输入。

if(!isValid){
     lblPriceComp1.setText("Not Competitive");
}

答案 1 :(得分:1)

提高可读性和解决引用问题的一种方法是通过提取方法中提到的各个条件(从而为它们命名他们正在做的事情)
并且正如其他人已经建议的那样使用链调用它们。

private boolean checkAgeLimits(int ageCustInt){
 return (ageCustInt >= ageMinComp1Int) && (ageCustInt <= ageMaxComp1Int);
}
private boolean checkAdtV1MileageCustInt(int adtV1MileageCustInt){
 ...
}
 ...
other validator methods
 ...
if (checkAgeLimits(ageCustInt)
    && checkAdtV1MileageCustInt(adtV1MileageCustInt)
    && .. other validators){
                                        btnComp1.setVisible(true);
                                        lblPriceComp1.setText("$ " + price1String);
                                        lblPriceComp1.setVisible(true);

            } else
            {
                lblPriceComp1.setText("Not Competitive");
            }

答案 2 :(得分:0)

从复杂程度来看,从技术上讲,对于条件语句或异常处理程序,你不应该超过3个级别。如果你明白这一点,最好的建议是将代码拆分出来并形成自己的方法。通过这种方式,您可以以更具建设性的方式划分和征服逻辑,而不会过度复杂化您的生活(或开发人员接管代码)。

基于您的代码库的示例可以如下(我没有实例化对象,因为您必须自己做):

/**
 * Add comment on the purpose of this method
 */
public void someMethod() {
    boolean isValid = false;
    if (ageCustInt >= ageMinComp1Int) {
        isValid = checkPointOne();
    }

    if(!isValid){
        lblPriceComp1.setText("Not Competitive");
    }
}

/**
 * Add comment on the purpose of this method
 * @return
 */
public boolean checkPointOne() {
    if (ageCustInt >= ageMinComp1Int && ageCustInt <= ageMaxComp1Int) {

        if (adtV1MileageCustInt >= adtVMileageMinComp1Int
                && adtV2MileageCustInt >= adtVMileageMinComp1Int
                && adtV3MileageCustInt >= adtVMileageMinComp1Int
                && adtV1MileageCustInt <= adtVMileageMaxComp1Int
                && adtV2MileageCustInt <= adtVMileageMaxComp1Int
                && adtV3MileageCustInt <= adtVMileageMaxComp1Int) {
            return checkPointTwo();
        }
    }
    return false;
}

/**
 * Add comment on the purpose of this method
 * @return
 */
public boolean checkPointTwo() {
    if (totalViolationsCustInt >= totalViolationsMinComp1Int && totalViolationsCustInt <= totalViolationsMaxComp1Int) {

        if (totalAdtDriversCustInt >= adtDriversMinComp1Int && totalAdtDriversCustInt <= adtDriversMaxComp1Int) {
            return checkPointThree();
        }
    }
    return false;
}

/**
 * Add comment on the purpose of this method
 * @return
 */
public boolean checkPointThree() {
    if (bodilyInjuryCust.equals(bodilyInjuryComp1)) {
        if (propDamageCust.equals(propDamageComp1)) {
            return checkPointFour();
        }
    }
    return false;
}

/**
 * Add comment on the purpose of this method
 * @return
 */
public boolean checkPointFour() {
    if (currentInsur.equals(presInsurKOComp1) || presInsurKOComp1.equals("Both")) {
        if (unUiBodilyCust.equals(unUiBodilyComp1)) {
            activateForm();
            return true;
        }
    }
    return false;
}

/**
 * This method will activate the form
 */
public void activateForm() {
    btnComp1.setVisible(true);
    lblPriceComp1.setText("$ " + price1String);
    lblPriceComp1.setVisible(true);
}

希望这可以帮助您过滤掉您不需要的逻辑,因为这种方法可以帮助您做出更好的编码选择,而不是踏上编码地狱的道路。祝你好运! :)