Java嵌套的If/Else条件

Java嵌套的If/Else条件,java,if-statement,Java,If Statement,我有一系列8个“击倒”if语句,它们必须通过才能显示适当的响应。如果这8条If语句中的任何一条失败,将显示相应的响应。下面是我的代码 if (ageCustInt >= ageMinComp1Int && ageCustInt <= ageMaxComp1Int){ if(adtV1MileageCustInt >= adtVMileageMinComp1Int && adtV2MileageCustInt >=

我有一系列8个“击倒”if语句,它们必须通过才能显示适当的响应。如果这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");
        }
如果(ageCustInt>=AGEMINCOMPINT&&ageCustInt=ADTVMILEAGEMINCOMPINT&&adtV2MileageCustInt>=ADTVMILEAGEMINCOMPINT&&adtV3MileageCustInt>=ADTVMILEAGEMINCOMPINT&&

adtv1mileagecustin根据其他人的建议,使用If链接概念,使用
&&,
将所有条件合并到一个If块中

最简单的可能是下面

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;
            }

提高可读性和解决引用问题的一种方法是提取您在方法中提到的单个条件(从而为它们命名它们正在做什么)
并像其他人已经建议的那样,用链条称呼他们

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");
            }
private boolean checkAgeLimits(int-agecustin){

返回(ageCustInt>=AGEMinCompint)和(ageCustInt从复杂性的角度来看,从技术上讲,关于条件语句或异常处理程序,您不应该降低超过3个级别。如果您达到这一点,最好的建议是将代码拆分并形成自己的方法。这样,您就可以以更具建设性的方式分解和征服逻辑,而不会产生过多的错误使您的生活复杂化(或者开发人员接管代码)

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

/**
*添加有关此方法用途的注释
*/
公共方法(){
布尔值isValid=false;
如果(ageCustInt>=AGEMinCompint){
isValid=checkPointOne();
}
如果(!isValid){
lblPriceComp1.setText(“非竞争性”);
}
}
/**
*添加有关此方法用途的注释
*@返回
*/
公共布尔检查点一(){
如果(ageCustInt>=AGEMINCOMPINT&&ageCustInt=ADTVMILEAGEMINCOMPINT
&&adtV2MileageCustInt>=ADTv2MileAgeMeinCompint
&&ADTv3英里客户数>=ADTvMileAgeminCompint

&&adtV1MileageCustInt的想法是:不要使用这么多嵌套的if…而不是嵌套这么多if,您可以将所有条件与and语句(&&)链接在一起。将所有这些条件提取到一个函数中,用
&&
s链接在一起。使用一个小if.OP应该记得在适当的时间将代码放在下一行。是的,声明一个标志来检查条件是否正确。我同意。@Sweeper条件可以合并,但这只是OP现有代码的替代方案。
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");
            }
/**
 * 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);
}