【问题标题】:How many times with the following loop iterate?以下循环迭代多少次?
【发布时间】:2020-02-16 21:06:49
【问题描述】:

]1

我的同学认为是 10 我知道是 11。我无法正确解释,所以有人想试一试吗?

变量从 10 开始。每次传递时,它减一,当 x 不大于 0 时循环退出。所以当 x 变为 0 时,循环退出。所以它从 10 到 0 发生。那是 11 次。

【问题讨论】:

  • 你有tried it吗?
  • 取决于您检查条件的位置以及何时减去 1。如果您在检查条件之前会执行 10 次
  • 为什么不自己尝试打印值,看看循环运行了多少次?
  • 欢迎来到 Stack Overflow。目前这个问题很可能已经结束,因为使用 IDE 很容易回答。家庭作业问题通常没有答案,以促进用户的自学。
  • @BCIT_Student_2019 这本质上是一个家庭作业问题。无论在学校环境中的目的是什么,关于书面代码的琐碎问题都将得不到解答,因为它们对网站的未来用户没有帮助。

标签: java loops iteration


【解决方案1】:

下面的循环恰好重复 10 次,将 x 的值从 10 打印到 1。循环在x = 0 时停止循环,因为0 不大于0。这个递减过程发生在程序循环10 次后的x--。因为循环恰好迭代了 10 次,所以首先打印 x 的值,然后将其递减 1、10 次。所以最后,x 的最终值是 0,但 x 正在打印的最后一个值是 1

【讨论】:

  • 把 while (x
  • 也不是问它打印了多少次。它询问它迭代了多少次
  • @BCIT_Student_2019 两者在这里都是一样的,如果你重复一个工作 5 次,那么你就做 5 次工作。
  • 你可以根据它打印的次数来判断它迭代了多少次。如果您仍然不确定,这里有另一种看待它的方式:程序递减 10 倍,导致每个循环的 x 值分别为:9、8、7、6、5、4、3、2、1 , 和 0。从 9 计数到 0,很明显循环发生了 10 次。
  • 我认为之前的评论可能具有误导性。 在这种特定情况下 do … whilewhile … do 之间没有区别,因为我们知道继续条件总是以 true 开始。但一般而言do … while 总是至少执行一次,while … do 可能执行零次。
【解决方案2】:

这可能比你想知道的要多,但你去吧。

你的例子和for (x = 10; x < 0; x--);没有什么不同

大多数循环都有开始、结束和增量。 (我不会说all loops,因为有人会想出一个不起眼的例子来证明我错了)。

对于 for 循环,有两种情况需要考虑。

  1. for (x = start; x

  2. for (x = start; x

对于闭环,次数计算为:

(end-start)/inc + 1

开环更复杂,因为必须减去 1 end 强制它成为 closed 循环。可以计算为

(end-1-start)/inc + 1

如果您更改startend 的位置并执行decrement 的增量,这也有效。

在您的情况下,它将是 (10 - 1 - 0)/1 + 1 = 10。

这里有一些测试代码可以用来检查每个循环类型。


       public static void main(String[] args) {
          Random r = new Random();
          for (int t = 0; t < 10_000; t++) {
             int realCountClosed = 0;
             int realCountOpen = 0;
             int start = r.nextInt(10);
             int end = r.nextInt(30) + 11;
             int inc = r.nextInt(4) + 1;
             for (int i = start; i <= end; i += inc) {
                realCountClosed++;
             }
             for (int i = start; i < end; i += inc) {
                realCountOpen++;
             }
             int computedCountClosed = (end - start) / inc + 1;

             int computedCountOpen = ((end - 1) - start) / inc + 1;

             if (realCountClosed != computedCountClosed) {
                System.out.println(
                      "Closed: " + realCountClosed + " " + computedCountClosed);
             }

             if (realCountOpen != computedCountOpen) {
                System.out.println(
                      "Open: " + realCountOpen + " " + computedCountOpen);
             }
          }
       }

最后一点。在 for 循环中 prepost 值的增量(即 -- 或 ++)不会影响循环。如果在循环的while 部分完成增量,则while 循环不是这种情况。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2013-12-14
    相关资源
    最近更新 更多