← 编程学习中心
📖

Preparation

8 个课程
1
如何学习编程
2
计算机基础
3
键盘初识与基准键位
4
字母与数字基础
5
Shift键魔法
6
编程符号专精
7
功能键与修饰键
8
键盘学习总结与进阶
📚

Basics

22 个课程
1
什么是编程?
2
Hello World - 你的第一个程序
3
变量基础概念 - 给信息贴标签
4
变量赋值和操作 - 变量的高级用法
5
数据类型基础 - 数字和字符串
6
基础运算符 - 数字运算王国
7
布尔类型与比较运算符 - 程序的判断基础
8
条件判断基础 - 让程序学会做决定
9
变量作用域 - 变量的生存范围
10
条件语句进阶 - 复杂判断与嵌套结构
11
逻辑运算符 - 简化复杂条件判断
12
循环语句 - 程序的重复机器
13
循环进阶 - break、continue与循环控制
14
嵌套循环与作用域
15
循环调试实战技巧
16
循环不变量 - 理解循环的数学规律
17
数组基础 - 数据的收纳盒
18
数组操作方法 - 添加、删除和管理
19
数组高级 - 探索数组的强大功能
20
引用概念 - 变量的不同行为
21
函数基础 - 解决重复代码的秘密武器
22
函数实践与应用 - 巩固基础,实战应用
🚀

Intermediate

11 个课程
1
从控制台到画布 - p5.js初体验
2
图形绘制工具箱 - 基础图形函数
3
让世界多彩 - 颜色系统详解
4
文字的艺术 - 文本绘制与样式
5
球体动起来 - 动画基础入门
6
球体的交互魔法 - 鼠标与条件判断
7
面向对象编程 - Class类与实例
8
球的家族 - 循环与数组应用
9
球的个性 - 函数封装与参数化
10
球的变身 - 形状模式与高级绘制
11
球的世界 - 综合创作项目
🎯

Advanced

6 个课程
1
对象类型
2
对象类型应用
3
自定义类型
4
函数进阶 - 箭头函数与高级编程技巧
5
内置方法 - 字符串与数组的魔法工具
6
Switch语句与字符串模板 - 更优雅的代码表达
← 编程学习中心
📖

Preparation

8 个课程
1
如何学习编程
2
计算机基础
3
键盘初识与基准键位
4
字母与数字基础
5
Shift键魔法
6
编程符号专精
7
功能键与修饰键
8
键盘学习总结与进阶
📚

Basics

22 个课程
1
什么是编程?
2
Hello World - 你的第一个程序
3
变量基础概念 - 给信息贴标签
4
变量赋值和操作 - 变量的高级用法
5
数据类型基础 - 数字和字符串
6
基础运算符 - 数字运算王国
7
布尔类型与比较运算符 - 程序的判断基础
8
条件判断基础 - 让程序学会做决定
9
变量作用域 - 变量的生存范围
10
条件语句进阶 - 复杂判断与嵌套结构
11
逻辑运算符 - 简化复杂条件判断
12
循环语句 - 程序的重复机器
13
循环进阶 - break、continue与循环控制
14
嵌套循环与作用域
15
循环调试实战技巧
16
循环不变量 - 理解循环的数学规律
17
数组基础 - 数据的收纳盒
18
数组操作方法 - 添加、删除和管理
19
数组高级 - 探索数组的强大功能
20
引用概念 - 变量的不同行为
21
函数基础 - 解决重复代码的秘密武器
22
函数实践与应用 - 巩固基础,实战应用
🚀

Intermediate

11 个课程
1
从控制台到画布 - p5.js初体验
2
图形绘制工具箱 - 基础图形函数
3
让世界多彩 - 颜色系统详解
4
文字的艺术 - 文本绘制与样式
5
球体动起来 - 动画基础入门
6
球体的交互魔法 - 鼠标与条件判断
7
面向对象编程 - Class类与实例
8
球的家族 - 循环与数组应用
9
球的个性 - 函数封装与参数化
10
球的变身 - 形状模式与高级绘制
11
球的世界 - 综合创作项目
🎯

Advanced

6 个课程
1
对象类型
2
对象类型应用
3
自定义类型
4
函数进阶 - 箭头函数与高级编程技巧
5
内置方法 - 字符串与数组的魔法工具
6
Switch语句与字符串模板 - 更优雅的代码表达

循环进阶 - break、continue与循环控制

掌握了基础的 for 和 while 循环后,现在我们来学习一些更高级的循环控制技巧!

break 和 continue - 循环的控制器

有时候我们不想让循环一直完整地执行,需要在某些情况下提前结束或跳过某些步骤。这时就需要 break 和 continue。

break - 提前跳出循环

break 就像是你突然想起有急事,立刻停止当前做的事情。

🎯 生活类比:找东西

想象你在找一把钥匙,你有10个抽屉要检查:

加载代码编辑器...

执行结果:

  • 只会检查第1、2、3、4个抽屉
  • 找到钥匙后,break 立刻跳出循环
  • 第5-10个抽屉不会被检查

for 循环中的 break

加载代码编辑器...

执行过程:

  • 循环从1开始,依次检查每个数字
  • 当检查到24时,发现24能同时被8和12整除
  • 输出结果并立即跳出循环,不再检查25-100
  • 后面的48、72、96等数字都不会被检查,因为我们只需要第一个

while 循环中的 break

加载代码编辑器...

执行过程:

  • 和for循环完全相同的效果
  • 只是语法结构不同,逻辑完全一样
  • 同样会在找到24后立即停止循环

while 循环的特殊 break 用法

while 循环常常用于"直到满足条件为止"的场景:

在学习这个例子之前,让我们先认识一个新的工具:

Math.random() - 生成随机数

Math.random() 是一个能生成随机数字的功能:

  • Math.random() 生成一个 0 到 1 之间的小数(包含0,不包含1)
  • 比如:0.123, 0.456, 0.789 等等

和 console.log 的类比:

  • 我们已经学过 console.log():console 是"控制台"对象,log 是"记录"方法
  • 现在学习的 Math.random():Math 是"数学"对象,random 是"随机"方法
  • 简单理解:Math 是一个专门处理数学运算的对象,random 是这个对象的一个方法
加载代码编辑器...

执行结果:

  • 每次运行都会得到不同的数字
  • 数字范围:0 ≤ 数字 < 1

Math.floor() - 向下取整

在介绍 Math.floor() 之前,我们先要理解什么是"取整":

什么是取整? "取整"就是把小数变成整数的过程。比如:

  • 3.7 变成 3 或 4
  • 5.2 变成 5 或 6

不同的取整方式:

  1. 四舍五入(round):按数学规则取舍

    • round 的英文意思是"圆形、环绕",就像把数字"绕"到最近的整数
    • 3.7 → 4(进位,因为0.7大于等于0.5)
    • 5.2 → 5(舍去,因为0.2小于0.5)
  2. 向下取整(floor):总是取较小的整数

    • floor 的英文意思是"地板",就像数字掉到"地板"上
    • 3.7 → 3(向下到整数3)
    • 5.2 → 5(向下到整数5)
  3. 向上取整(ceil):总是取较大的整数

    • ceil 的英文意思是"天花板"(ceiling的缩写),就像数字碰到"天花板"
    • 3.7 → 4(向上到整数4)
    • 5.2 → 6(向上到整数6)

Math.floor() 就是专门做"向下取整"的工具:

加载代码编辑器...

关键理解:

  • Math.floor() 只会"向下"取整,不会四舍五入
  • Math.floor(3.7) 得到 3,不是 4
  • Math.floor(0.9) 得到 0,不是 1

两个方法的组合使用

在实际编程中,我们经常把 Math.random() 和 Math.floor() 组合使用,来生成指定范围的随机整数。

数学原理:如何从 0-1 的小数得到 1-10 的整数?

我们的目标:把 Math.random() 生成的 0 ≤ 数字 < 1 转换成 1 ≤ 数字 ≤ 10

转换思路:

  1. 扩大范围:0-1 的小数 → 0-10 的小数
  2. 取整:0-10 的小数 → 0-9 的整数
  3. 调整区间:0-9 的整数 → 1-10 的整数

步骤分解演示:

加载代码编辑器...

为什么是 0-9 而不是 0-10?

  • Math.random() 最大只到 0.999...(不包含1)
  • 0.999... × 10 = 9.999...
  • Math.floor(9.999...) = 9
  • 所以向下取整后最大只能是 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 才会退出
  • 每次循环生成一个1-100的随机数
  • 如果数字大于90,就输出结果并 break 退出循环
  • 否则继续下一次循环,直到生成符合条件的数字

💡 break 使用建议:

  • 找到目标就停止:搜索、查找类问题
  • 配合条件使用:通常和 if 语句一起使用

通过这些例子,你可以看到 break 在不同循环结构中都能有效地控制程序流程,让代码更加灵活!

continue - 跳过本次循环

continue 就像是你跳过某个步骤,直接进行下一步。

🎯 生活类比:检查作业

想象老师在检查学生的作业,跳过不合格的:

加载代码编辑器...

执行结果:

  • 会检查第1、2、4、5个学生
  • 第3个学生被跳过,不执行检查作业的代码
  • 直接进入下一次循环(第4个学生)

for 循环中的 continue

加载代码编辑器...

执行过程详解:

让我们以 i=3 和 i=4 为例,详细看看 continue 的作用:

当 i=3 时:

  1. i <= 20 条件检查:通过(3 ≤ 20)
  2. 执行循环体:console.log("检查数字:" + i) 输出 "检查数字:3"
  3. 条件判断:i % 3 === 0 为真(3能被3整除)
  4. 执行 continue:跳过循环体的剩余代码
  5. 继续执行更新部分:i = i + 1,i 变成 4
  6. 继续下一次循环:回到第1步检查 i=4

当 i=4 时:

  1. i <= 20 条件检查:通过(4 ≤ 20)
  2. 执行循环体:console.log("检查数字:" + i) 输出 "检查数字:4"
  3. 条件判断:i % 3 === 0 || i % 5 === 0 为假(4既不是3也不是5的倍数)
  4. 跳过 continue,继续执行循环体剩余代码
  5. 执行:console.log(" " + i + " 符合条件,保留") 输出 " 4 符合条件,保留"
  6. 执行更新部分:i = i + 1,i 变成 5
  7. 继续下一次循环:回到第1步检查 i=5

重要理解:continue 不会跳过循环更新!

  • continue 只跳过本次循环中 continue 后面的代码
  • for 循环的更新部分(i = i + 1)依然会执行
  • 这就是为什么循环能正常进行,不会卡在某个数字上
  • 否则就是无限循环了:如果 continue 跳过了更新部分,比如当 i=3 时执行 continue 后 i 仍然是3,下一次循环又检查 i=3,会无限卡在数字3上

while 循环中的 continue

加载代码编辑器...

执行过程详解(while 循环的特殊性):

让我们以 number=3 和 number=4 为例,看看 while 循环中 continue 的特殊性:

当 number=3 时:

  1. number <= 20 条件检查:通过(3 ≤ 20)
  2. 执行循环体:console.log("检查数字:" + number) 输出 "检查数字:3"
  3. 条件判断:number % 3 === 0 为真(3能被3整除)
  4. 手动更新变量:number = number + 1,number 变成 4 ⚠️ 关键步骤!
  5. 执行 continue:跳过循环体的剩余代码
  6. 继续下一次循环:回到第1步检查 number=4

当 number=4 时:

  1. number <= 20 条件检查:通过(4 ≤ 20)
  2. 执行循环体:console.log("检查数字:" + number) 输出 "检查数字:4"
  3. 条件判断:number % 3 === 0 || number % 5 === 0 为假
  4. 跳过 continue,继续执行循环体剩余代码
  5. 执行:console.log(" " + number + " 符合条件,保留") 输出 " 4 符合条件,保留"
  6. 手动更新变量:number = number + 1,number 变成 5
  7. 继续下一次循环:回到第1步检查 number=5

关键差异:while 循环没有自动更新部分!

  • for 循环:有内置的更新部分 i = i + 1,continue 不会跳过它
  • while 循环:没有自动更新部分,必须手动在 continue 前更新变量

重要理解:while 循环中的 continue

  • continue 只跳过本次循环中 continue 后面的代码
  • 变量更新必须手动处理:while 循环没有自动更新机制
  • 忘记更新 = 无限循环:这是 while 循环使用 continue 时的最常见错误

💡 continue 使用建议:

  • 跳过异常情况:处理数据时跳过不符合条件的项目
  • 保持循环变量更新:在while循环中要小心无限循环
  • 逻辑清晰:让跳过条件更加明确

💡 break vs continue 对比:

  • break:完全停止循环,退出循环体
  • continue:跳过本次循环,继续下一次循环
  • break:用于"找到了目标,不需要再继续"
  • continue:用于"这个不符合,看看下一个"

通过这些例子,你可以看到 continue 如何帮助我们优雅地处理数据过滤和异常情况!

for 循环的高级特性

在掌握了基础的 break 和 continue 后,让我们深入学习 for 循环的高级特性。

三个部分都是可选的

for 循环的三个部分(初始值、条件判断、更新)都是可选的,我们可以根据需要灵活地省略它们。但是有一个重要规则:分号永远不能省略!

完整的 for 循环结构:for (初始值; 条件判断; 更新)

让我们看看各种省略情况和使用场景:

省略初始值:当变量需要在外部定义时

加载代码编辑器...

什么时候使用?

  • 变量需要在循环前就存在
  • 循环结束后还需要使用这个变量
  • 多个循环需要共享同一个计数器

实际例子:

加载代码编辑器...

省略更新部分:当需要在循环体内手动控制更新时

加载代码编辑器...

什么时候使用?

  • 更新逻辑比较复杂
  • 更新操作需要多行代码

实际例子:

加载代码编辑器...

同时省略初始值和更新:完全手动控制时

加载代码编辑器...

这时候 for 循环就变得和 while 循环很相似了!

省略条件判断:创建无限循环时

加载代码编辑器...

为什么省略条件会变成无限循环?

for 循环的完整结构是:for (初始值; 条件判断; 更新)

  • 条件判断:决定循环是否继续的关键
  • 省略条件 = 没有退出条件 = 永远继续
  • 必须有 break:否则循环永远不会停止

重要理解:for 循环的三个部分

  • 初始值:可选,可以在外部定义
  • 条件判断:可选,省略则变成无限循环,需要配合 break
  • 更新部分:可选,可以在循环体内手动更新
  • 分号:永远不能省略!必须保留两个分号分隔三个部分

总结

今天我们学习了循环的高级技巧:

📚 核心知识

  1. break:提前跳出循环,用于"找到目标就停止"
  2. continue:跳过本次循环,用于"这个不符合,看看下一个"
  3. for循环高级特性:三个部分都是可选的,灵活运用

🎯 实用技巧

  • 选择合适的控制语句
  • 理解while循环中continue的特殊处理
  • 掌握随机数生成和取整的组合使用
  • 灵活运用for循环的高级特性

掌握了这些循环控制技巧,你就能够:

  • 写出更灵活的循环代码
  • 处理各种复杂的逻辑场景
  • 解决更多实际编程问题
Previous lesson
Previous
循环语句 - 程序的重复机器
Next
嵌套循环与作用域
Next lesson