【问题标题】:why is my integer increasing by 2 instead of 1? java为什么我的整数增加了 2 而不是 1?爪哇
【发布时间】:2018-09-30 00:58:32
【问题描述】:

我实现的代码就像一个简单的时钟,在我的课堂上每次都应该增加 1。到目前为止,这就是我在主程序中的内容:

public static void main(String[] args) {
    BoundedCounter counter = new BoundedCounter(60);
    System.out.println("Value at start: " + counter);
    int i = 0;
    while (i < 10) {
        counter.next();
        System.out.println("Value: " + counter);
        i++;
    }
}

这里是“BoundedCounter”类:

class BoundedCounter {

    private int value;
    private int upperBound;

    public BoundedCounter(int upperBound) {
        this.upperBound = upperBound;
        this.value = 0;  
    }

    public void next () {
        if (value++ > upperBound) { 
            value = 0;
        } else {
            value++;
        }
    }

    public String toString() {
        return "" + value;
    }
}

这段代码的输出是:

Value at start: 0
Value: 2
Value: 4
Value: 6
Value: 8
Value: 10
Value: 12
Value: 14
Value: 16
Value: 18
Value: 20

我不明白为什么它增加了 2,而在课堂上的 while 语句有 value++;这意味着它应该增加 1。

我在这里错过了什么?

【问题讨论】:

  • 您在next() 中调用了两次value++
  • if(value++){} else{value++} 你做两次
  • 因为您正在执行++ 两次:一次在if (value++ ... 中,然后在几行之后的else 块中。
  • 即使在if 的条件下,您使用的是value++,即使在该行执行后条件不满足,它也会增加值,这就是它增加2的原因

标签: java while-loop int increment


【解决方案1】:

你的if 执行value++ 然后(假设输入了else)你再做一次。改变

if (value++ > upperBound) { 
    value = 0;
} else {
    value++;
}

类似

if (value + 1 > upperBound) { 
    value = 0;
} else {
    value++;
}

if (value < upperBound) {
    value++;
} else {
    value = 0;
}

【讨论】:

  • (或删除其他)。
  • @AndyTurner 取决于他是想增加任何一种方式还是只在第二种情况下增加
  • (或if (value &gt;= upperBound)
  • if (value &gt;= upperBound) 是一种更安全的编写方式,因为它可以避免upperBound == Integer.MAX_VALUE 时出现整数溢出问题。
  • @Rafalon 为什么不呢?
猜你喜欢
  • 2019-09-14
  • 2013-08-12
  • 2021-12-07
  • 1970-01-01
  • 2020-04-02
  • 2016-04-20
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多