整数数组计数失效求助:字符串匹配后自增逻辑排查
问题分析与修复方案
嘿,我一眼就看出问题出在哪了!咱们来拆解你这段代码的逻辑:
你写的三元表达式:
personName[0] = n[y].getName().equals("Penny") ? personName[0]++ : personName[0];
这里的坑点在于后置自增运算符++的执行顺序:
- 当条件为
true时,personName[0]++会先返回当前的旧值,再把变量加1 - 但紧接着你又把这个旧值重新赋值给了
personName[0],等于把刚加的1给覆盖回去了,结果自然没变化!
几种修复方案:
方案1:改用前置自增运算符
前置自增++personName[0]会先把变量加1,再返回新值,这样赋值后就能得到正确的结果:
personName[0] = n[y].getName().equals("Penny") ? ++personName[0] : personName[0];
方案2:用if语句(更推荐)
其实完全没必要用三元表达式绕弯子,直接用if判断逻辑更清晰,也不容易踩运算符的坑:
if (n[y].getName().equals("Penny")) { personName[0]++; }
方案3:简洁的三元赋值写法
如果坚持想用三元表达式,可以换一种更直观的写法,直接给变量加1或0:
personName[0] += n[y].getName().equals("Penny") ? 1 : 0;
额外小提示
为了避免空指针异常,建议把字符串比较的顺序反过来(如果getName()可能返回null的话):
if ("Penny".equals(n[y].getName())) { personName[0]++; }
这样即使n[y].getName()返回null,也不会抛出NullPointerException。
内容的提问来源于stack exchange,提问作者Hasnain Ali
相关产品推荐
相关产品推荐

