本篇用一组独立的虚构记录研究点按与长按的判定时刻。先规定输入和边界,再逐步推演结果;所有规则都为练习而设,不代表某个真实产品的默认实现。你可以先遮住答案,用纸记录中间状态,再比较第一处产生分歧的位置,而不只看最终结论。

机制与注意点

同一个按键可以根据持续时间触发不同操作,但必须明确在哪一刻作出决定。如果没有排除已触发长按的抬起事件,一次按住可能被错误算成两次操作。

本例只在抬起时分类,不在按住过程中自动触发。每段记录都是完整的一次按下和抬起,重复消息和重叠按键不在本例范围内。

明确规则与输入

完整按住时长小于1忽略,至少1但小于7是点按,至少7是长按。只在抬起分类,每段最多一个结果。

第0段:2→8 第1段:11→18 第2段:22→32 第3段:33→36 第4段:38→46 第5段:49→57 第6段:61→64 第7段:68→79 第8段:80→80

逐步核对记录

2按下、8抬起,持续6刻,判为点按;它只产生这一种结果。

11按下、18抬起,持续7刻,判为长按;它只产生这一种结果。

22按下、32抬起,持续10刻,判为长按;它只产生这一种结果。

33按下、36抬起,持续3刻,判为点按;它只产生这一种结果。

38按下、46抬起,持续8刻,判为长按;它只产生这一种结果。

49按下、57抬起,持续8刻,判为长按;它只产生这一种结果。

61按下、64抬起,持续3刻,判为点按;它只产生这一种结果。

68按下、79抬起,持续11刻,判为长按;它只产生这一种结果。

80按下、80抬起,持续0刻,判为忽略;它只产生这一种结果。

结果及另一种检查

分类顺序['点按', '长按', '长按', '点按', '长按', '长按', '点按', '长按', '忽略'],合计{'忽略': 1, '点按': 3, '长按': 5}。

把所有持续时间投到三个互不相交区间:前两段包含左端但不包含右端,最后一段包含阈值并延伸到更大值。三个计数之和必须等于输入段数;特别复核等于最短时长和长按阈值的情况。

自己动手复盘

复核时把数据、判断条件和更新后的状态分开写。相等边界、编号从零还是从一开始、先筛选还是先排序,都可能造成看似微小却会延续到后续步骤的差别。不要为了让最后数字吻合而跳过中间错误;先找到第一处不同,再按同一规则重新推演。

进一步练习只改变一项输入,例如一个边界值、一个标签或一次操作,先预测受影响的部分,再计算新结果。把不受影响的部分也记录下来,能更清楚地看出规则的作用范围。应用到真实游戏前,先核对其帮助说明或在可重复场景中验证条件,避免把本例的虚构约定当成通用标准。