有点不明白
balls[cnt++] =balls[j];
举个例子,每秒循环20次,当第15次的时候开始有不符合条件的小球出现,此时数组的情况是:
那balls[cnt]储存的部分是后面深蓝的吗?
cnt计数应该是从0开始的,可是后面深蓝的部分是从21开始的啊
push()和pop()都是对最后面的处理,这个不是去除不掉前面浅蓝的部分吗?
有点不明白
balls[cnt++] =balls[j];
举个例子,每秒循环20次,当第15次的时候开始有不符合条件的小球出现,此时数组的情况是:
那balls[cnt]储存的部分是后面深蓝的吗?
cnt计数应该是从0开始的,可是后面深蓝的部分是从21开始的啊
push()和pop()都是对最后面的处理,这个不是去除不掉前面浅蓝的部分吗?
2014-09-04
根据你的示意图,第一次运行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]以后的小球给删除掉了。
对于这个算法,确实配一个动画现实更直观。谢谢你的提问,
举报