Java:i++ 出现问题

标签 java while-loop compare

我无法理解为什么部分代码甚至会运行:

private int m;
private int n;

public void f() {
    m = (m +2) % n;
    System.out.print(m+"\n");
}

public void g() {
    int i=0;
    m=0;
    n=8;
    while (i++<n) {
        System.out.print("i=" + i + " m=");
        f();
    }
}

如果我运行 g() ,我打印出以下内容:

i++=1 m=2
i++=2 m=4
i++=3 m=6
i++=4 m=0
i++=5 m=2
i++=6 m=4
i++=7 m=6
i++=8 m=0

据我了解,最后一行不应出现。为什么 f()上次得到了吗?

何时 f()第一次被调用,i = 0那里有i++ = 1 。 (所以当我打印 i 时,它已经等于 1 )。

当我打电话f()时倒数第二次,i = 6 ,还有i++ = 7 。这是最后一个整数,即 < n (n = 8)。

为什么当 i++ 时该函数再次被调用已经是= 8 ?这真的让我很困惑。

最佳答案

使用++i而不是i++ .

  • i++ 制作一个副本,增加 i,然后返回副本,因此它将 返回 i 的旧值(后增量)。

  • ++i 增加 i,并返回更新后的值 i(预增量)。

所以当你检查条件i++<n时它使用旧值进行检查,因此条件评估为 true。

关于Java:i++ 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39305260/

相关文章:

java - 如何返回常量字段

java - 如何使用 Java Swing 创建简单的圆角矩形按钮?

php - 将数组值与同一数组中的其他值进行比较

java - 基于 Spring 注解的缓存

ios - 线程、断点

linux - Bash 'while read line' 到一个数组和总和

javascript - 更改 JavaScript with 语句的行为以防止赋值修改全局对象

testing - QTP 与 Selenium - 比较

Java - 比较一组值

java - Google AppEngine java.net.Socket 受限错误