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

Java中counter在if条件未满足时仍异常累加问题排查求助

问题诱因
  • 核心原因是Java中逻辑与(&&)优先级高于逻辑或(||),你编写的判断条件没有显式加括号分组,导致实际执行的判断逻辑和预期不符。
  • 具体到你的代码,内层触发计数的if条件:
    你原本的写法是:
    if (tgt.length() == 2 && tgt.charAt(1) == ')' || tgt.charAt(1) == 'D')
    
    按运算符优先级会被Java自动解析为:
    if ( (tgt.length() == 2 && tgt.charAt(1) == ')') || tgt.charAt(1) == 'D' )
    
    只要目标字符串的第二个字符是D,不管长度是否为2,整个判断条件都会返回真,所以长度为3的:DD也会触发counter累加。
  • 补充:你的外层if条件也存在同样的优先级问题,原本的写法只要首字符是;,哪怕字符串长度超过3也会进入外层分支,不符合你提到的length() <=3的前置设计要求。
修复方案
  • 对逻辑或的组合条件显式加括号分组,调整后代码如下:
int counter = 0;
String tgt = ":DD";

for (int i = 0; i < a.size(); i++) {
    // 外层条件加括号分组:长度<=3 且 首字符为:或;
    if (tgt.length() <= 3 && (tgt.charAt(0) == ':' || tgt.charAt(0) == ';')) {
        // 内层条件加括号分组:长度为2 且 第二个字符为)或D
        if (tgt.length() == 2 && (tgt.charAt(1) == ')' || tgt.charAt(1) == 'D')) {
                counter += 1;
        }
        // 其余else if分支保留即可
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:36:04