为了账号安全,请及时绑定邮箱和手机立即绑定

有点不明白

balls[cnt++] =balls[j];

举个例子,每秒循环20次,当第15次的时候开始有不符合条件的小球出现,此时数组的情况是:

那balls[cnt]储存的部分是后面深蓝的吗?

cnt计数应该是从0开始的,可是后面深蓝的部分是从21开始的啊

push()和pop()都是对最后面的处理,这个不是去除不掉前面浅蓝的部分吗?

正在回答

1 回答

根据你的示意图,第一次运行balls[cnt++] =balls[j]的时候,就是:

balls[0] = balls[20],之后cnt++,cnt为1;

第二次的时候为 balls[1] = balls[21],,之后cnt++,cnt为2;

第三次的时候为 balls[2] = balls[22],,之后cnt++,cnt为3;

...

以此类推,

最后一次运行的时候,是:balls[179] = balls[199],,之后cnt++,cnt为180;


之后j=200 循环结束。此时,balls[0]-balls[179]为180个在屏幕内的小球。balls[180]-balls[199]的数据没有用了。


这样的算法,在结果不规整的时候极为有用,比如 balls[3]-balls[21];balls[25]-balls[77];balls[80]-balls[128];balls[156]-balls[177]都显示在屏内时,你可以试着想想这个算法的操作结果。


最后的处理就是把尾巴部分balls[180]以后的小球给删除掉了。


对于这个算法,确实配一个动画现实更直观。谢谢你的提问,


2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信