这个for(i--;i>j;j+=2,i-=j%3)是什么意思?

What is the meaning of this for(i--;i>j;j+=2,i-=j%3)?

int i =14;
int j =2;
    for(i--;i>j;j+=2,i-=j%3){
        System.out.println(i + " ");
}

它 returns 13,12,12,10 但我不明白背后的原因!

i缩减为13作为起始条件。 i>j 是继续循环的条件,所以如果 j>=i 则循环退出。在每次迭代中,j 增加 2,i 减少 j%3(这是 j 除以 3 后的余数)。

我建议你在纸上手动计算 ij 来让自己满意这个结果。

假设您熟悉 while 循环。您的代码与以下代码相同:

int i = 14;
int j = 2;

i -= 1;
while(i > j) {
    System.out.println(i + " ");
    j += 2;
    i -= j % 3;
}

有关 for 循环的更多信息,请参阅 java docs

for 循环的语法:

for (initialization; termination; increment) {
    statement(s)
}

您可以提供多个初始化、终止或增量。在您的代码中,您提供了多个增量表达式。

您可以通过如下所示创建 table 来分析您的代码,尤其是循环。您可以创建一个 table,其中行代表迭代,列代表表达式,它们的执行顺序从左开始:

i j i > j System.out.println(i + " "); j += 2 i -= j % 3
13 2 true 13 4 12
12 4 true 12 6 12
12 6 true 12 8 10
10 8 true 10 10 9
9 10 false

你应该熟悉for循环第一部分正常启动for循环的计数器。第二部分定义进入下一轮循环的条件,第三部分更新下一轮的计数器。

  1. 开始for循环i被i--设置为13

    • 13 大于 2。
    • 因此打印 i = 13。
    • 更新计数器 j = 4 by j+=2 and i= 12 by i-=4%3 alias i-=1.
  2. 条件 12 大于 4 通过。

    • 因此打印 i = 12。
    • 更新计数器 j = 6 by j+=2 and i= 12 by i-=6%3 alias i-=0
  3. 条件 12 大于 6 通过。

    • 因此打印 i = 12。
    • 更新计数器 j = 8 by j+=2 and i= 10 by i-=8%3 alias i-=2
  4. 条件 10 大于 8 通过。

    • 因此打印 i = 10。
    • 更新计数器 j = 10 by j+=2 and i= 9 by i-=10%3 alias i-=1
  5. 条件 9 大于 10 失败。

    • 退出循环。