【问题标题】:Seems to be an extra output in nested for loop似乎是嵌套 for 循环中的额外输出
【发布时间】:2013-11-28 11:16:10
【问题描述】:

这段代码:

   for (i = 1; i <= 5; i++)
          System.out.print(" i ");
   for (j = 1; j <= i; j++)
          System.out.print(" j ");
         System.out.println();

给出以下输出:

 i  i  i  i  i  j  j  j  j  j  j 

我不明白为什么它给出了 6 个 js 而不是 5 个。谁能解释我缺少什么?

【问题讨论】:

  • 想一想第一个 for 循环测试失败的时间?

标签: java for-loop nested-loops


【解决方案1】:

for 在每次循环结束时应用增量。在开始下一个循环之前检查条件,因此在第二个循环开始时,i 将是 6 而不是 5。

通过设置第二个条件j&lt;i 来解决此问题。

【讨论】:

    【解决方案2】:

    你的第一个循环的不变量是

    i <= 5
    

    因此循环将继续迭代,直到该不变量不再成立。所以当你到达第二个循环时,你可以确定i小于等于5;换句话说,它大于 5。

    【讨论】:

      【解决方案3】:

      当我未能满足条件i &lt;= 5 时,第一个循环停止,这意味着i=6

      所以第二个循环完全一样

       for (j = 1; j <= 6; j++) System.out.print(" j ");
      

      哪个打印 6 j。

      【讨论】:

        【解决方案4】:

        在“i for”的末尾,i 等于 6,这就是 j 被打印 6 次的原因。

        【讨论】:

          【解决方案5】:

          使用调试然后你会意识到这一点。第一个 for 循环退出 i=6 的时刻,然后你的第二个将运行循环运行 6 次,因为 j 的上限现在是 6。然后你得到6 js

          【讨论】:

            【解决方案6】:

            当它完成第一个循环时,i 的值为 6。阅读有关后增量运算符和 for 循环的更多信息。

            【讨论】:

              【解决方案7】:

              j for-loop 进入时,i 将为 6,因为第一个循环将在 i==6 处终止,而不是您所期望的 i==5

              【讨论】:

                猜你喜欢
                • 2020-05-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-04-18
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多