本系列第 2/8 课,建议 45–60 分钟(估算)。先完成上一课。
这课解决什么
输入框读到的是文本。先判断能否转成数字,再检查范围和整数约束,最后乘 60。顺序不能颠倒,否则非法文本会先触发运算错误。
先预测,再运行
输入 1.5 分钟,应该允许还是拒绝?这是谁决定的?
先记下自己的答案,运行起始工程与完成工程比较;答案见文末。
开始实战
以上一课完成工程为起点,先导入并运行,再另存为本课作业。
完成工程可以查看答案;独立作业请保留自己的修改。
新增或调整的组件
| 实例名 | 组件 | 本课配置 |
|---|---|---|
标签_标题 |
标签 | Width=Fill parent;FontSize=24;TextColor=#183153;Text=专注学习 · 第 2课 |
文本输入框_分钟 |
文本输入框 | Hint=1–180 分钟;Width=Fill parent;FontSize=16;Text=25 |
标签_剩余 |
标签 | Width=Fill parent;FontSize=32;TextColor=#183153;Text=尚未开始 |
逐步搭建
- 增加分钟输入框、剩余标签,并声明剩余、任务、状态变量。
- 先用 isNumber 判断;再检查 1–180,并比较 floor(输入) 与 输入×1,拒绝小数。
- 合法时把剩余设为分钟×60,更新标签。这一课只设置时长,不会自动倒计时。
- 分别输入 abc、0、181、1.5、2;前四个拒绝,2 显示 120 秒。

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。
核心积木与数据流
下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。
global 剩余 = 0
global 状态 = "待开始"
global 任务 = ""
when 按钮_开始.Click() {
if trim(文本输入框_任务.Text) = "" { 标签_状态.Text = "请填写任务" }
else if not isNumber(文本输入框_分钟.Text) { 标签_状态.Text = "请输入数字分钟" }
else if 文本输入框_分钟.Text < 1 or 文本输入框_分钟.Text > 180 or floor(文本输入框_分钟.Text) != 文本输入框_分钟.Text * 1 { 标签_状态.Text = "分钟须为 1–180 的整数" }
else {
任务 = trim(文本输入框_任务.Text)
剩余 = 文本输入框_分钟.Text * 60
状态 = "已设置"
标签_剩余.Text = join(剩余, " 秒")
标签_状态.Text = join(状态, ":", 任务)
}
}
中途检查与排错
本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。
- 拒绝空任务。
- 非数字、非正数、上限、小数拒绝。
- 2分钟等于120秒。
排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。
本阶段尚未加入数据保存,关闭应用会丢失任务;计时器用于前台刷新,不是系统后台闹钟。
两个理解题与独立改造
- 输入 1.5 分钟,应该允许还是拒绝?这是谁决定的?
- 为什么必须先检查数字,再做范围或乘法运算?
独立改造: 改为接受 0.5–60 的小数分钟;写清是否四舍五入秒数。
先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。
查看预测与练习参考答案
预测: 本课约定只接受 1–180 的整数分钟,所以拒绝;这是业务规则,不是数学上不能计算 90 秒。
追踪: 无效文本不能参与数值运算;短路条件与嵌套分支保护后续操作。
改造思路: 先检查数字及范围,再 round(分钟×60)。删除整数约束;不要只改提示文字。
完成与下一步
保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。
扫码添加客服咨询