“123”算法设计思路
背景:
在做展厅的项目时,遇到一个需求,用一个激光笔,有两种播放模式,控制三个屏幕播放图片。这个功能经过了两次迭代,第一次设计的很不好,用户体验很差,切换图片不流畅,图片错乱等问题经常出现,不过第二次我从新思考这个问题,经过思考,优化了切换图片的算法,并且取得了良好的效果。因此,我将它命名为“123算法”。
功能简介:
三个屏幕:三个屏幕,对应到程序中就是三个组图片的list。
两种模式:自动模式就是让三块屏幕自动播放各自的list图片,通过定时器循环,手动模式是暂停定时器,然后让激光笔的上下键切换图片。
一个激光笔:激光笔有四个按键,暂停,播放两个按键分别三个屏幕图片 自动播放,还是手动播放。上一个,下一个,切换图片使用。按下一个时,默认从第一块屏幕开始切换,切换到第一个屏幕的最后一张时,再按下键时,开始切换第二块屏幕的图片。同理,上一个按键也是如此。
难点:
从1切2,从2切3,以及从2切1,从3切2 索引控制
切到最左侧和切到最右侧,索引如何处理,保证往回切不会错乱
思路:
在这里,自动模式我们可以暂时不考虑,因为自动只需要把三组图片的索引都置位0,然后用定时器切换即可。
手动模式,我们用一个索引来判断当前切换的图片应该 落在哪个数组上, 这个索引的最小值是1,最大值是三组图片的数量总和。
思路很简单,接下来我们来思考几个问题。
1.索引默认值是多少?
答:1。 因为当暂停自动播放时,要把三组图片每个都回到第一张上,因此相当于索引已经切到第一张图片,所以是1.
2.如何控制切换哪个数组?
答:通过三组图片数量判断。向后切,索引增加到数组一长度时,则该切换数组二的图片,以此类推。向前切,2切1,索引小于数组1的长度时,则切换数组1图片。
3.由1切2时,2屏幕已经到第一张图片了,索引还增加吗?
答:增加。 因为如果不增加,用户就会以为激光笔不好用,会出现卡顿现象。我第一个版本就是没有切换,以至于每次卡顿和报错分不清楚,所以导致体验很差。
4.索引增加了,那再去判断切换哪个数组的范围是不是就要变了?
答:是。这里有一个要点,就是只要用户点击了下或上键,就必须切换图片。因此,实际上我们判断的末端索引要比数量总和小于2才正确。
5.索引到末尾了,或者到最前了,用户还在疯狂按怎么办?
答:双重保护。在切换到最后一张图片时,就不要再去增加索引,并置位默认最大值。再去判断,若多次点击导致超出范围,也将其置位默认值。
6.索引万一失效,某组图片少切一张,而直接越过怎么办?
答:边界赋值。当切换到边界时,重新给每个数组置默认值,比如到达末尾时,就让三组图片都到最后一张。
总结:
一个产品,最开始可能只是追求实现,但是只有实现是不行的,要想做得好,就需要不断地进行迭代,优化其算法。