主要内容
指令的条件重复
有时我们不知道自己想要重复一个指令的次数,但我们知道我们想要它在某个条件为真的时候停止。在这种情况下,程序员使用类似 while 循环 的编程构造重复代码。
while 循环
这是JavaScript语言中
while
循环的通用模板:while ( <condition> ) {
<instructions>
}
当
<condition>
为真时,计算机不断重复<instructions>
。 从概念上讲,
while
循环非常类似于if
条件,除了while
连续执行,直到它不再为真,而if
只执行一次。 我们有时使用流程图可视化
while
循环,类似于我们可视化条件的方式:让我们看一个简单的
while
循环:var i = 1;
while (i <= 10) {
println(i);
i++;
}
该代码将输出数字1到10,然后一旦
i
变为11并因此不再小于或等于10,计算机将停止输出i
的值。这个例子很简单,但也非常类似于
while
循环的所有用法。我们的代码通常首先在while
之前初始化一个变量(或多个),然后在条件中引用该变量(或相关的变量),然后在指令中以某种方式修改该变量。 这个特殊的
while
循环示例通常被编程为for
循环,因为我们提前知道我们希望代码重复的次数。有很多次我们不知道重复代码的确切次数。我们现在先探讨其中一个。兔子繁殖程序
想象一下,农民决定养兔子,但她担心兔子会繁殖得太快。农民只有100只兔子的空间,想要知道从2只兔子到兔子超过100只所需要的时间是多少。
我们可以创建一个程序,只要兔子数量不足100,就能不断模拟兔子的繁殖,并记录它需要多少年。
这是该方案的第一稿:
var numRabbits = 2;
var numYears = 0;
while (numRabbits <= 100) {
numRabbits += (numRabbits/2 * 30);
numYears++;
}
该程序首先将兔子群体初始化为2(交配对),并将0传递给年数。
while
循环检查兔子的数量是否小于100。只要该条件为真, 循环内的代码增加了兔子的数量(根据每年母兔子可以繁衍多少小兔子的估计值),然后增加年数。在运行程序 之后,我们可以看到估算结果只代入了2年,在这2年后,将会有 512只兔子。Yeesh!农民最好建造一支更大的养殖场或考虑一下养可爱的毛茸茸的羊。
✏️我们还可以将
while
循环与其他编程技巧结合起来。下面的程序是一个更高级的兔子复制器,它使用嵌套的 for
循环和 if
随机决定一只兔子是母的还是公的。调整数值,看看每次数字如何变化!小心无限循环
只有在
while
循环内的条件为假时,计算机才会退出循环。 但是,如果它永远不是假的呢?查看下面的程序:
var i = 0;
while (i < 100) {
println("这是一个永不结束的循环。");
println("是的,永不结束,我的朋友...");
println("计算开始允许这个代码,并不知道代码是否会结束...");
println("计算机会永远执行下去只是因为...");
}
你认为会发生什么?亲自尝试一下!不,等等,不要!那是一个无限循环,而且很难知道计算机将如何处理它。我们尝试在KA编程环境中检测并防止无限循环 - 但我们并不总是成功 - 因此最好避免它们。
为什么这个循环无限? 该程序首先将
i
初始化为0,然后while
循环检查i
是否小于100。在结果为真时,它会显示一首流行歌曲的歌词。循环中的任何变化都 无法 改变i
的值,因此该条件将永远为真。作为程序员,您可能会在生涯中编写至少一个无限循环。当你发现自己整在盯着控制台上一连串的输出并且散热器风扇的声音越来越大时,可以庆祝自己写出了第一个无限循环的成就。在你完成庆祝(并使计算机恢复健康状态)之后,再思考思考那些未来不该做的事情。😉
在伪代码中的条件循环
AP CSP 检查伪代码不包含
while
循环,而是包含一个非常相似的结构:REPEAT UNTIL
。REPEAT UNTIL (条件)
{
<指令>
}
此代码将重复指令 直到 条件最终是真的。
要从
while
移植到REPEAT UNTIL
,我们通常只需要反转条件。这是一个显示数字1到10的简单循环的案例:
i ← 1
REPEAT UNTIL (i ≥ 11)
{
DISPLAY(i)
i ← i + 1
}
当它是
while
时,我们检查i
是否小于或等于10。现在我们使用UNTIL
,我们检查i
是否大于或等于11。在这种情况下,我们甚至可以简化它来检查它是否等于11,因为在这段代码中,i
无法变为大于11。现在让我们看看伪代码中的兔子复制器:
numRabbits ← 2
numYears ← 0
REPEAT UNTIL (numRabbits > 100)
{
numRabbits ← numRabbits + (numRabbits/2 * 30)
numYears ← numYears + 1
}
使用while循环,我们的条件检查
numRabbits <= 100
。 现在我们正在使用UNTIL
,所以我们检查numRabbits> 100
。🙋🏽🙋🏻♀️🙋🏿♂️你对这个章节还有问题吗?我们会尽力回答— 请在下面提问框里留言!