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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:03:03