【问题标题】:What is the meaning of this for(i--;i>j;j+=2,i-=j%3)?这个for(i--;i>j;j+=2,i-=j%3)是什么意思?
【发布时间】: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


    【解决方案1】:

    假设您熟悉 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

    【讨论】:

    • Nit: i -= 1; 更类似于 --i; 而不是 i--;。如果您不使用表达式的值,这并不重要;但是由于您对所有其他表达式都使用了“相同的东西”,所以我会坚持使用i--,就像原来的一样。
    【解决方案2】:

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

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

      • 13 大于 2。
      • 因此打印 i = 13。
      • 将计数器 j = 4 更新为 j+=2,将 i= 12 更新为 i-=4%3 别名 i-=1。
    2. 条件 12 大于 4 通过。

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

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

      • 因此打印 i = 10。
      • 将计数器 j = 10 更新为 j+=2,i= 9 更新为 i-=10%3 别名 i-=1
    5. 条件 9 大于 10 失败。

      • 退出循环。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-14
        相关资源
        最近更新 更多