首页 > 解决方案 > 以下循环迭代多少次?

问题描述

] 1

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

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

标签: javaloopsiteration

解决方案


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

您的示例与for (x = 10; x < 0; x--);

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

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

  1. 对于(x = 开始;x <= 结束;x+=inc);// 我称之为关闭

  2. 对于(x = 开始;x < 结束;x+inc);// 我称之为开放

对于闭环,次数计算为:

(end-start)/inc + 1

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

(end-1-start)/inc + 1

如果您更改 and 的位置并执行增量,这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一部分中完成的,则循环不是这种情况。


推荐阅读