FOR循环超过上限依旧运行……(上限是变量)
本帖最后由 YGYL 于 2019-11-17 15:01 编辑<blockquote>#include <Array.au3>#include <Array.au3>
Dim $aArray[] =
$iLineCount = UBound($aArray)
For $i = 0 To ($iLineCount - 1)
;~ If $i> $iLineCount - 1 Then ExitLoop
ConsoleWrite($i & "*to*" & $iLineCount-1 & @CRLF)
ConsoleWrite($i & "@@@@@" & $aArray[$i] & @CRLF)
If StringInStr($aArray[$i], "1") > 0 Then
_ArrayDelete($aArray, $i)
$iLineCount = $iLineCount - 1
$i = $i - 1
EndIf
ConsoleWrite( $i &"#n#" & ($iLineCount - 1) & @CRLF)
Next
_ArrayDisplay($aArray, $i)
该示例会报错
在最后一次循环时,i=8了,而$iLineCount - 1=7,但循环并没有跳出,后面的语句仍然运行了,8*to*7,然后下一句超数组报错
当然加个判断ExitLoop,或换成Do...Until体系 是可以的
但走到这步的原理,根源是不是 for循环 上限只在初始化时被确定一次?$iLineCount后期改变 并不影响既定步数?
会不会是搞复杂了
#include <Array.au3>
Dim $aArray[] =
For $i = UBound($aArray) - 1 To 0 Step -1
If StringInStr($aArray[$i], "1") Then
_ArrayDelete($aArray, $i)
EndIf
Next
_ArrayDisplay($aArray, $i)
zghwelcome 发表于 2019-11-17 16:15
会不会是搞复杂了
#include
Dim $aArray[] =
方法不错
不过例子还是简单、明显点好
毕竟不是问怎么删数组最短 删除元素在for遍历时,应从数组的最后一个元素往前删
#include <Array.au3>
Dim $aArray[] =
$iLineCount = UBound($aArray)
For $i = ($iLineCount - 1) To 0 step -1
ConsoleWrite($i & "*to*" & $iLineCount-1 & @CRLF)
ConsoleWrite($i & "@@@@@" & $aArray[$i] & @CRLF)
If StringInStr($aArray[$i], "1") > 0 Then
_ArrayDelete($aArray, $i)
$iLineCount = $iLineCount - 1
$i = $i - 1
EndIf
ConsoleWrite( $i &"#n#" & ($iLineCount - 1) & @CRLF)
Next
_ArrayDisplay($aArray, $i) tubaba 发表于 2019-11-22 16:37
删除元素在for遍历时,应从数组的最后一个元素往前删
#include
Dim $aArray[] =
我问的是FOR循环为什么超过上限依旧运行?不是问用for循环下怎么删除元素合理哦! 本不想回答这个问题,第一,您自己都已经得到结果了,第二,不知道您看过帮助文件了没有?au3是容易入门,但也不是容易到不用看帮助就可以学习提高的语言
tubaba 发表于 2019-11-28 10:02
本不想回答这个问题,第一,您自己都已经得到结果了,第二,不知道您看过帮助文件了没有?au3是容易入门, ...
要的就是这种答案
当年看的英文版,没那么细,而且十几年过去了~~
页:
[1]