我正在参加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
次。