本帖最后由 3mile 于 2011-6-22 19:40 编辑
回复 kk_lee69
3mile也没有搞明白for循环时“起止变量”的内部用法
的确不需要那两行
happytc 发表于 2011-6-22 13:55 回复 3mile
三笑,这样是不是多算了一步,虽说影响不大,但如果100个成绩都小于60,岂不是要循环计算200次(我 ...
netegg 发表于 2011-6-22 19:06
既然蛋蛋兄问起,我来解释一下我的想法吧.
顺便修正一下错误.我在8楼的代码只考虑了最后一个数据小于60的情况,但没有考虑最后几组数小于60的情况.
#include <array.au3>
local $array[100][2]
for $i=0 to 99
$array[$i][0]=ChrW(Random(19968,40869,1))&ChrW(Random(19968,40869,1))&ChrW(Random(19968,40869,1))
$array[$i][1]=Random(1,100,1)
Next
_ArrayDisplay($array)
;Local $Array[5][2] = [["張三", 42], ["李四", 64], ["王五", 44], ["劉六", 34], ["林七", 58]]
for $i=UBound($array)-1 to 0 step -1
;$k=UBound($array)-1
if $array[$i][1]<60 Then
_ArrayDelete($array,$i)
if $i<UBound($array)-1 Then $i+=1
EndIf
Next
if UBound($array)=0 then
msgbox(0,0,"居然没有及格的?")
Else
_ArrayDisplay($array)
EndIf
为什么要在这里加一行IF $i<UBound($array)-1 then $i+=1呢?
假设数组为$Array[5][2] = [["張三", 42], ["李四", 51], ["王五", 65], ["劉六", 34], ["林七", 58]]
最后一个数 林七 58分 小于60,但如果不理会先删除数组4号元素后,直接$i+1,此时$i=5,进入循环时$i由于step -1此时又成了4,再判断的是4号元素.可4号元素已经删除,此时直接数组溢出了.
由此推论,happytc兄在5楼中的ArrayDelete()的使用是错误的.另请问一下,什么叫"起止变量"?
关于蛋蛋兄所说的效率问题,的确会多进行N次循环,但不是简单的UBound($array)/2次.等同于回塑一个单位.
解释完毕.语文不好,可能解释不是很清楚.见谅! |