Java中counter在if条件未满足时仍异常累加问题排查求助
问题诱因
- 核心原因是Java中逻辑与(&&)优先级高于逻辑或(||),你编写的判断条件没有显式加括号分组,导致实际执行的判断逻辑和预期不符。
- 具体到你的代码,内层触发计数的if条件:
你原本的写法是:
按运算符优先级会被Java自动解析为:if (tgt.length() == 2 && tgt.charAt(1) == ')' || tgt.charAt(1) == 'D')
只要目标字符串的第二个字符是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
相关产品推荐
相关产品推荐

