编程基础与事件状态 02:把分钟变成可以计算的秒数

课程首页 · 全部知识课程 · 返回专题主页

本系列第 2/8 课,建议 45–60 分钟(估算)。先完成上一课。

下载本课完成工程 .aia

这课解决什么

输入框读到的是文本。先判断能否转成数字,再检查范围和整数约束,最后乘 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=尚未开始

逐步搭建

  1. 增加分钟输入框、剩余标签,并声明剩余、任务、状态变量。
  2. 先用 isNumber 判断;再检查 1–180,并比较 floor(输入) 与 输入×1,拒绝小数。
  3. 合法时把剩余设为分钟×60,更新标签。这一课只设置时长,不会自动倒计时。
  4. 分别输入 abc、0、181、1.5、2;前四个拒绝,2 显示 120 秒。

专注学习助手第2课运行状态布局预览

图来自本课最终工程执行积木后的状态,为 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 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。

  1. 拒绝空任务。
  2. 非数字、非正数、上限、小数拒绝。
  3. 2分钟等于120秒。

排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。

本阶段尚未加入数据保存,关闭应用会丢失任务;计时器用于前台刷新,不是系统后台闹钟。

两个理解题与独立改造

  1. 输入 1.5 分钟,应该允许还是拒绝?这是谁决定的?
  2. 为什么必须先检查数字,再做范围或乘法运算?

独立改造: 改为接受 0.5–60 的小数分钟;写清是否四舍五入秒数。

先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。

查看预测与练习参考答案

预测: 本课约定只接受 1–180 的整数分钟,所以拒绝;这是业务规则,不是数学上不能计算 90 秒。

追踪: 无效文本不能参与数值运算;短路条件与嵌套分支保护后续操作。

改造思路: 先检查数字及范围,再 round(分钟×60)。删除整数约束;不要只改提示文字。

完成与下一步

保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。

上一课 · 下一课:计时器刷新,截止时刻计时

文档反馈