掌握了基础的 for 和 while 循环后,现在我们来学习一些更高级的循环控制技巧!
有时候我们不想让循环一直完整地执行,需要在某些情况下提前结束或跳过某些步骤。这时就需要 break 和 continue。
break 就像是你突然想起有急事,立刻停止当前做的事情。
想象你在找一把钥匙,你有10个抽屉要检查:
执行结果:
break 立刻跳出循环执行过程:
执行过程:
while 循环常常用于"直到满足条件为止"的场景:
在学习这个例子之前,让我们先认识一个新的工具:
Math.random() - 生成随机数
Math.random() 是一个能生成随机数字的功能:
Math.random() 生成一个 0 到 1 之间的小数(包含0,不包含1)和 console.log 的类比:
console.log():console 是"控制台"对象,log 是"记录"方法Math.random():Math 是"数学"对象,random 是"随机"方法Math 是一个专门处理数学运算的对象,random 是这个对象的一个方法执行结果:
Math.floor() - 向下取整
在介绍 Math.floor() 之前,我们先要理解什么是"取整":
什么是取整? "取整"就是把小数变成整数的过程。比如:
不同的取整方式:
四舍五入(round):按数学规则取舍
round 的英文意思是"圆形、环绕",就像把数字"绕"到最近的整数向下取整(floor):总是取较小的整数
floor 的英文意思是"地板",就像数字掉到"地板"上向上取整(ceil):总是取较大的整数
ceil 的英文意思是"天花板"(ceiling的缩写),就像数字碰到"天花板"Math.floor() 就是专门做"向下取整"的工具:
关键理解:
Math.floor() 只会"向下"取整,不会四舍五入Math.floor(3.7) 得到 3,不是 4Math.floor(0.9) 得到 0,不是 1两个方法的组合使用
在实际编程中,我们经常把 Math.random() 和 Math.floor() 组合使用,来生成指定范围的随机整数。
数学原理:如何从 0-1 的小数得到 1-10 的整数?
我们的目标:把 Math.random() 生成的 0 ≤ 数字 < 1 转换成 1 ≤ 数字 ≤ 10
转换思路:
步骤分解演示:
为什么是 0-9 而不是 0-10?
Math.random() 最大只到 0.999...(不包含1)0.999... × 10 = 9.999...Math.floor(9.999...) = 9完整组合使用:
公式总结:Math.floor(Math.random() * 10) + 1
Math.random(): 生成 0-0.999... 的小数* 10: 变成 0-9.999... 的小数Math.floor(): 变成 0-9 的整数+ 1: 变成 1-10 的整数扩展应用:生成其他范围的随机整数
现在我们已经掌握了 Math.random() 和 Math.floor() 的组合使用,让我们来看看一个经典的 while 循环应用场景:
应用场景:直到满足条件为止
在很多实际编程中,我们需要不断尝试某些操作,直到满足特定条件为止。这种情况下,while(true) 配合 break 是最常用的模式。
例子:不断生成随机数,直到生成大于90的数
执行过程:
while (true) 创建一个无限循环,只有遇到 break 才会退出break 退出循环💡 break 使用建议:
- 找到目标就停止:搜索、查找类问题
- 配合条件使用:通常和
if语句一起使用
通过这些例子,你可以看到 break 在不同循环结构中都能有效地控制程序流程,让代码更加灵活!
continue 就像是你跳过某个步骤,直接进行下一步。
想象老师在检查学生的作业,跳过不合格的:
执行结果:
执行过程详解:
让我们以 i=3 和 i=4 为例,详细看看 continue 的作用:
当 i=3 时:
i <= 20 条件检查:通过(3 ≤ 20)console.log("检查数字:" + i) 输出 "检查数字:3"i % 3 === 0 为真(3能被3整除)continue:跳过循环体的剩余代码i = i + 1,i 变成 4当 i=4 时:
i <= 20 条件检查:通过(4 ≤ 20)console.log("检查数字:" + i) 输出 "检查数字:4"i % 3 === 0 || i % 5 === 0 为假(4既不是3也不是5的倍数)continue,继续执行循环体剩余代码console.log(" " + i + " 符合条件,保留") 输出 " 4 符合条件,保留"i = i + 1,i 变成 5重要理解:continue 不会跳过循环更新!
continue 只跳过本次循环中 continue 后面的代码i = i + 1)依然会执行continue 跳过了更新部分,比如当 i=3 时执行 continue 后 i 仍然是3,下一次循环又检查 i=3,会无限卡在数字3上执行过程详解(while 循环的特殊性):
让我们以 number=3 和 number=4 为例,看看 while 循环中 continue 的特殊性:
当 number=3 时:
number <= 20 条件检查:通过(3 ≤ 20)console.log("检查数字:" + number) 输出 "检查数字:3"number % 3 === 0 为真(3能被3整除)number = number + 1,number 变成 4 ⚠️ 关键步骤!continue:跳过循环体的剩余代码当 number=4 时:
number <= 20 条件检查:通过(4 ≤ 20)console.log("检查数字:" + number) 输出 "检查数字:4"number % 3 === 0 || number % 5 === 0 为假continue,继续执行循环体剩余代码console.log(" " + number + " 符合条件,保留") 输出 " 4 符合条件,保留"number = number + 1,number 变成 5关键差异:while 循环没有自动更新部分!
i = i + 1,continue 不会跳过它continue 前更新变量重要理解:while 循环中的 continue
continue 只跳过本次循环中 continue 后面的代码💡 continue 使用建议:
- 跳过异常情况:处理数据时跳过不符合条件的项目
- 保持循环变量更新:在while循环中要小心无限循环
- 逻辑清晰:让跳过条件更加明确
💡 break vs continue 对比:
break:完全停止循环,退出循环体continue:跳过本次循环,继续下一次循环break:用于"找到了目标,不需要再继续"continue:用于"这个不符合,看看下一个"
通过这些例子,你可以看到 continue 如何帮助我们优雅地处理数据过滤和异常情况!
在掌握了基础的 break 和 continue 后,让我们深入学习 for 循环的高级特性。
for 循环的三个部分(初始值、条件判断、更新)都是可选的,我们可以根据需要灵活地省略它们。但是有一个重要规则:分号永远不能省略!
完整的 for 循环结构:for (初始值; 条件判断; 更新)
让我们看看各种省略情况和使用场景:
省略初始值:当变量需要在外部定义时
什么时候使用?
实际例子:
省略更新部分:当需要在循环体内手动控制更新时
什么时候使用?
实际例子:
同时省略初始值和更新:完全手动控制时
这时候 for 循环就变得和 while 循环很相似了!
省略条件判断:创建无限循环时
为什么省略条件会变成无限循环?
for 循环的完整结构是:for (初始值; 条件判断; 更新)
重要理解:for 循环的三个部分
今天我们学习了循环的高级技巧:
掌握了这些循环控制技巧,你就能够: