如果陈述没有贯穿所有可能性

时间:2018-02-04 03:36:43

标签: java

    if (condition1){//checks intersect
        if(condition2){//checks A
            if(condition3){
                System.out.println("Collision A");
            }   
        }else if(condition4){
            if(condition5){
                System.out.println("Collision B");
            }
        }else if(condition6){
            System.out.println("Collision C");
        }else{  
            System.out.println("Collision D");
        }
        System.out.println("Collision done");
    }

当我在一个方法中运行此代码时,碰撞D永远不会工作/打印。但是,碰撞总是打印出来。所以通常cmd打印出“Collision A Collision done”,但是当碰撞d发生时它只会打印出“碰撞完成”。

编辑:大大简化了代码,条件本身不是问题。

1 个答案:

答案 0 :(得分:2)

基本上,忽略变量的混乱,你就有了这个设置:

 if (condition1){//checks intersect
    if(condition2){//checks A
        if(condition3){
            System.out.println("Collision A");
        }   
    }else if(condition4){
        if(condition5){
            System.out.println("Collision B");
        }
    }else if(condition6){
        System.out.println("Collision C");
    }else{  
        System.out.println("Collision D");
    }
    System.out.println("Collision done");
}

方式仅打印"碰撞完成"消息,而没有其他"碰撞A-D"消息,如果您触发条件1,2, 3,或者您触发条件1,4和 5.您没有触发&#34 ;碰撞D"用例;你的"碰撞A"和"碰撞B"用例不完整。

如果你想触发"碰撞D"在这种情况下,您需要将if(condition 2)更改为if(condition2 && !condition3 && !condition4 && !condition6);或者你是否正在经历条件4'例如,您需要将if(condition4)更改为if(condition4 && !condition5 && !condition6)

或者,或者,将您的结构更改为:

 if (condition1){//checks intersect
    if(condition2 && condition3){
        System.out.println("Collision A");            
    }else if(condition4 && condition5){
        System.out.println("Collision B");
    }else if(condition6){
        System.out.println("Collision C");
    }else{  
        System.out.println("Collision D");
    }
    System.out.println("Collision done");
}

鉴于原始代码的复杂性以及更新代码的模糊性,很难确定哪种更适合您的特定情况。