找回密码
 加入
搜索
查看: 2314|回复: 6

[AU3基础] FOR循环超过上限依旧运行……(上限是变量)

[复制链接]
发表于 2019-11-17 14:58:53 | 显示全部楼层 |阅读模式
本帖最后由 YGYL 于 2019-11-17 15:01 编辑
<blockquote>#include <Array.au3>
#include <Array.au3>
Dim $aArray[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
$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后期改变 并不影响既定步数?

发表于 2019-11-17 16:15:31 | 显示全部楼层
会不会是搞复杂了

#include <Array.au3>
Dim $aArray[] = [1, 2, 3, 4, 5, 6, 7, 8, 1, 9, 10, 11, 12, 0]
For $i = UBound($aArray) - 1 To 0 Step -1
        If StringInStr($aArray[$i], "1") Then
                _ArrayDelete($aArray, $i)
        EndIf
Next
_ArrayDisplay($aArray, $i)



 楼主| 发表于 2019-11-17 21:27:39 | 显示全部楼层
zghwelcome 发表于 2019-11-17 16:15
会不会是搞复杂了[au3]
#include
Dim $aArray[] = [1, 2, 3, 4, 5, 6, 7, 8, 1, 9, 10, 11, 12, 0]

方法不错
不过例子还是简单、明显点好
毕竟不是问怎么删数组最短
发表于 2019-11-22 16:37:36 | 显示全部楼层
删除元素在for遍历时,应从数组的最后一个元素往前删
#include <Array.au3>
Dim $aArray[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
$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)
 楼主| 发表于 2019-11-26 19:31:14 | 显示全部楼层
tubaba 发表于 2019-11-22 16:37
删除元素在for遍历时,应从数组的最后一个元素往前删
#include
Dim $aArray[] = [1, 2, 3, 4, 5, 6, 7, 8 ...

我问的是FOR循环为什么超过上限依旧运行?不是问用for循环下怎么删除元素合理哦!
发表于 2019-11-28 10:02:11 | 显示全部楼层
本不想回答这个问题,第一,您自己都已经得到结果了,第二,不知道您看过帮助文件了没有?au3是容易入门,但也不是容易到不用看帮助就可以学习提高的语言

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

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

要的就是这种答案

当年看的英文版,没那么细,而且十几年过去了~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 08:21 , Processed in 0.071827 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表