【发布时间】:2021-09-20 14:57:00
【问题描述】:
int i =14;
int j =2;
for(i--;i>j;j+=2,i-=j%3){
System.out.println(i + " ");
}
它返回 13,12,12,10 但我不明白它背后的原因!
【问题讨论】:
标签: java loops for-loop iterator integer
int i =14;
int j =2;
for(i--;i>j;j+=2,i-=j%3){
System.out.println(i + " ");
}
它返回 13,12,12,10 但我不明白它背后的原因!
【问题讨论】:
标签: java loops for-loop iterator integer
假设您熟悉 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)
}
您可以提供多个初始化、终止或增量。在您的代码中,您为增量提供了多个表达式。
您可以通过创建如下所示的表格来分析您的代码,尤其是循环。您可以创建一个表,其中行代表迭代,列代表表达式,其执行顺序从左开始:
| 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 |
【讨论】:
i -= 1; 更类似于 --i; 而不是 i--;。如果您不使用表达式的值,这并不重要;但是由于您对所有其他表达式都使用了“相同的东西”,所以我会坚持使用i--,就像原来的一样。
你应该熟悉 for 循环 第一部分通常启动 for 循环的计数器。第二部分定义进入下一轮循环的条件,第三部分更新下一轮的计数器。
开始 for 循环 i 被 i--设置为 13。
条件 12 大于 4 通过。
条件 12 大于 6 已通过。
条件 10 大于 8 已通过。
条件 9 大于 10 失败。
【讨论】:
i 减少为 13 作为起始条件。 i>j 是继续循环的条件,所以如果j>=i 循环退出。在每次迭代中,j 增加 2,i 减少 j%3(这是j 除以 3 后的余数)。
我建议你在纸面上手动计算i 和j 来满足自己的这个结果。
【讨论】: