【问题标题】:Is there a way to tell how many times a for loop will execute before running it?有没有办法告诉 for 循环在运行之前执行多少次?
【发布时间】:2021-01-02 08:21:40
【问题描述】:

我正在参加 Java 课程的介绍,并且正在参加练习测验。这些测验没有评分,不计入我们的成绩,所以我想我会在这里发布。

在正常情况下,我只会复制代码并将其粘贴到 IDE 中,但我想知道是否有办法从逻辑上考虑这个问题,以便找出答案。在真正的考试中,我们不允许使用 eclipse 或类似的东西来找出答案,而且这个问题需要很长时间才能手工完成并计算它通过 for 循环的次数。

问题来了:

for循环中的print语句执行了多少次?

    for(int i = 0; i <347589; i++) {
       System.out.print("Give me coffee!");
    }

【问题讨论】:

  • 它将运行347589 次...为什么?因为i0 开始,每次结果小于347589 时都会增加1。但是,循环范围内可能存在中断条件,这可能会导致更难准确判断它将实际运行多少次迭代。
  • 你怎么看。用小数试试。说for(int i = 0; i &lt;3; i++) 并试运行它。相信它很容易。
  • 347589 次。如果您想确定,请将 347589 替换为 2 并在您的头脑中进行测试。 i 从 0 开始,一直到 347588。 i++ 告诉它一次只增加 1。如果 for 循环是 for(int i=0;i&lt;347589; i=i+2),情况会有所不同
  • 似乎有很多方法可以表达相同的想法。哈哈。除了@deHaar :)
  • @Conffusion 再看看我的评论,我也必须这样做;-)

标签: java for-loop printing conditional-statements counting


【解决方案1】:

您基本上可以将for 循环的上限作为答案,在这种情况下为 347,589。要得出这个答案,请考虑一个边界更小的 for 循环:

for (int i=0; i < 5; ++i) {
    System.out.println("Give me coffee!");
}

通过检查,我们可以看到这个循环会在什么时候执行:

i = 0
i = 1
i = 2
i = 3
i = 4

不会i = 5 时执行,因为这不符合条件。因此,它执行了五次,这与 for 循环的上限相同。我们可以将此推断到您问题中的循环,得到 347,589 作为答案。

【讨论】:

    【解决方案2】:

    没有通用方法可以确定 while 循环在运行之前将执行多少次。这个事实被称为停止问题的不可判定性。 for 循环只是 while 循环的语法糖,所以这也适用于 for 循环。停机问题是许多很棒的书籍的主题,其中包括 Douglas Hofstadter 的哥德尔、埃舍尔和巴赫

    但是,您给出的 for 循环非常简单:它增加 i 直到 i 不再满足 i &lt; 347589。变量 i 从 0 开始并逐一递增:i++ 等价于 i = i + 1;。所以i 获取所有连续的值:0, 1, 2, 3, 4, ...,347588 并且每次都执行System.out.println("Give me coffee!"); 行。

    然后i取值347589,不再满足i &lt; 347589,所以循环停止。

    总的来说,“给我咖啡!”被打印了 347589 次。

    如果您不喜欢 for 循环的语法,您的代码等效于以下使用 while 循环的代码:

    int i = 0;
    while (i < 347589)
    {
        System.out.print("Give me coffee!");
        i = i + 1;
    }
    

    【讨论】:

      【解决方案3】:

      由于您有一个简单的 for 循环,它只执行一个语句多次,您可以简单地计数。您可能知道循环在第一次执行时以i=0 开始,并在每次执行后加1,直到条件i&lt;347589 为假。所以:

      i=0 -> once (1.)
      i=1 -> twice (2.)
      ...
      i=347588 -> 347589 times (347589.)
      i=347589 -> loop stops.
      

      所以 print 语句将被执行 347589 次。

      【讨论】:

        【解决方案4】:

        在课程中,他们可能只想检查您对编码基础知识的了解。在这些类型的问题中,您应该注意最重要的 4-5 件事。

        1- 索引的起点。

        2- 索引的结束点,还要检查该值是否包含在内。

        3- 索引的递增/递减,索引是递增/递减 1 还是其他值或模式。

        4- 他们在循环中是否有任何 break 语句,这也表明循环将运行到特定条件。

        在您给出的示例中,起点是 0,终点是 347589(不包括),增量为 1,因此循环将运行。 347589 - 0 + 1(基于 0 的索引)= 347589 次。

        【讨论】:

          【解决方案5】:

          显然,FOR 循环不是 Java 特定的问题。

          为了正确理解FOR 循环,让我们举一个简单的例子。

            for (int i = 0; i < 10; i++) {
               System.out.println(i); 
            }
          

          此代码将打印从 0 到 10 的所有数字(不包括)。
          因此,0-10 范围有 10 个不同的值:

           0
           1 
           2
           3 
           4 
           5 
           6 
           7 
           8 
           9
          

          i变成10时FOR循环语句(i

          因此,在您的情况下,"Give me coffee!" 将以相同的逻辑打印347589 次。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-01
            • 1970-01-01
            相关资源
            最近更新 更多