YGYL 发表于 2019-11-17 14:58:53

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后期改变 并不影响既定步数?

zghwelcome 发表于 2019-11-17 16:15:31

会不会是搞复杂了
#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)



YGYL 发表于 2019-11-17 21:27:39

zghwelcome 发表于 2019-11-17 16:15
会不会是搞复杂了
#include
Dim $aArray[] =


方法不错
不过例子还是简单、明显点好
毕竟不是问怎么删数组最短

tubaba 发表于 2019-11-22 16:37:36

删除元素在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)

YGYL 发表于 2019-11-26 19:31:14

tubaba 发表于 2019-11-22 16:37
删除元素在for遍历时,应从数组的最后一个元素往前删
#include
Dim $aArray[] =

我问的是FOR循环为什么超过上限依旧运行?不是问用for循环下怎么删除元素合理哦!

tubaba 发表于 2019-11-28 10:02:11

本不想回答这个问题,第一,您自己都已经得到结果了,第二,不知道您看过帮助文件了没有?au3是容易入门,但也不是容易到不用看帮助就可以学习提高的语言

YGYL 发表于 2019-12-10 22:49:18

tubaba 发表于 2019-11-28 10:02
本不想回答这个问题,第一,您自己都已经得到结果了,第二,不知道您看过帮助文件了没有?au3是容易入门, ...

要的就是这种答案

当年看的英文版,没那么细,而且十几年过去了~~
页: [1]
查看完整版本: FOR循环超过上限依旧运行……(上限是变量)