You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 19中多条件if-else分支执行逻辑咨询

if-else if分支执行逻辑与你的Java无限循环问题分析

核心问题解答

当A和B同时为true时,TODO CODE 2完全不会执行。这和逻辑表达式优先级无关,本质是if-else if结构的执行规则决定的:

  • if-else if是顺序判断、短路执行的结构:程序从第一个if条件开始依次检查,只要某个条件判定为true,就执行对应代码块,之后所有后续的else if/else分支会直接跳过,不再进行任何判断。
  • 当A && B为true时,第一个分支已经触发执行,后面的else if(A || B)连判断的机会都没有,哪怕A || B的逻辑值为true也不会被处理。

你的Java代码无限循环原因分析

从你提供的代码来看,无限循环的根源不在分支判断逻辑,而在状态同步缺失:

if(this.zombie && ennemi.zombie) { 
    System.out.println("Combat de zombies ! "); 
    int rnd = (int) Math.floor(Math.random()*2); 
    if(rnd == 0 ){ 
        this.state = State.Mort; 
        // 此处未将this.zombie设为false
    }else 
        ennemi.state = State.Mort ; 
        // 此处未将ennemi.zombie设为false
}else if(this.zombie || ennemi.zombie){ 
    this.zombie = true; 
    this.state = State.Zombie; 
    ennemi.zombie = true; 
    ennemi.state = State.Zombie; 
}
  • 当第一个分支触发时,你只修改了state为Mort,但没有同步将对应的zombie字段设为false。这导致即使某一方已经死亡,zombie的值仍然保持true。
  • 后续循环中,this.zombie && ennemi.zombie始终为true,程序会反复进入第一个分支,随机设置其中一方为Mort,但永远无法让zombie变为false,也就永远跳不出这个分支逻辑,最终陷入无限循环。

修复建议

在设置state = State.Mort的同时,同步把对应的zombie字段设为false:

if(rnd == 0 ){ 
    this.state = State.Mort; 
    this.zombie = false; // 添加这行
}else {
    ennemi.state = State.Mort ; 
    ennemi.zombie = false; // 添加这行
}

内容的提问来源于stack exchange,提问作者Gui Gui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:15:31