有没有一种方法可以告诉在运行for循环之前,它将执行多少次



我正在参加java课程的介绍,我正在参加一个练习测验。这些测验没有评分,也不计入我们的分数,所以我想我会在这里发布。

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

问题是:

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

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

基本上可以只取for循环的上界作为答案,在这种情况下为347589。为了得到这个答案,考虑一个具有更小边界的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循环的上限相同。我们可以把它外推到你问题的循环中,得到347589作为答案。

在运行while循环之前,没有通用的方法来计算while循环将执行多少次。这一事实被称为停止问题的不可判定性。For循环只是while循环的语法糖,所以这也适用于For循环。停顿问题是许多很棒的书的主题,其中包括道格拉斯·霍夫施塔特的《哥德尔、埃舍尔和巴赫》。

然而,您给出的for循环非常简单:它增加i,直到i不再满足i < 347589。变量i从0开始,一个接一个地增加:i++相当于i = i + 1;。所以i取所有连续的值:0,1,2,3,4。。。,347588,并且每次都执行线路System.out.println("Give me coffee!");

然后i取值347589,并且不再满足i < 347589,因此循环停止。

总的来说;给我咖啡"印刷347589次。

如果你不喜欢for循环的语法,你的代码相当于下面使用while循环的代码:

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

因为您有一个简单的for循环,它只执行一条语句多次,所以您可以简单地计数。您可能知道,循环从第一次执行的i=0开始,每次执行后加1,直到条件i<347589为false。因此:

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

因此打印语句将被执行347589次。

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

1-索引的起点。

2-索引的终点,同时检查是否包含该值。

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

4-是循环中的任意break语句,这也将指示循环将运行到特定条件。

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

显然,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<10(将不满足,并且循环将被中断

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

最新更新