Java实现的计数器每次递增2而非1,求问题排查
为什么你的BoundedCounter每次递增2而非1?
嘿,这个问题我之前也碰到过!从你给出的主程序代码来看,逻辑本身是没问题的——循环10次调用next(),每次应该只递增加1才对。出现每次加2的情况,大概率是你的BoundedCounter类里的两个关键方法出了小问题,我给你列两个最常见的原因:
1. next()方法里不小心写了两次递增操作
这是最容易犯的小失误,比如你的next()方法可能写成了这样:
public void next() { value++; value++; // 多写了一次递增,或者逻辑里重复执行了赋值 if (value >= upperBound) { value = 0; } }
或者错误地用了value += 2这种赋值语句,直接让数值一次加2。
正确的next()方法应该只做一次递增,比如:
public void next() { value++; if (value == upperBound) { value = 0; } }
2. toString()方法意外触发了递增
你每次打印counter的时候,JVM会自动调用它的toString()方法。如果你的toString()方法里不小心调用了next(),或者做了修改value的操作,比如:
public String toString() { next(); // 错误地在这里调用了递增方法 return String.valueOf(value); }
这样一来,每次System.out.println(counter)时,除了你主动调用的counter.next(),toString()又偷偷做了一次递增,最终数值就每次加2了。
正确的toString()应该只负责返回当前值的字符串形式,不要修改状态:
public String toString() { // 如果需要补零的话可以用格式化,比如两位数字的时钟显示 return String.format("%02d", value); // 简单点也可以直接返回 String.valueOf(value) }
你可以对照检查一下你的BoundedCounter类代码,应该就能找到问题啦!
内容的提问来源于stack exchange,提问作者Cade
相关产品推荐
相关产品推荐

