打乱数字顺序并读取?
比如我要把1-50的数字打乱,然后进行读取,应该怎么做呢?如果我随机读取是可以读取到其中一个数字,但是我需要读取50次,后续的读取中就不能再有这个数字了
For $i = 1 To 50 Step +1
$suiji = Random (1,50,1)
msgbox (4096,'shuzi',$suiji)
Next
这样的思路不行,大神有好的办法没有? #include <array.au3>
Local $aAry
For $i = 0 To UBound($aAry) - 1
$aAry[$i] = $i + 1
Next
_ArrayShuffle($aAry)
_ArrayDisplay($aAry)
数组重组~谢谢大佬,有思路了,我去试试 我觉得撸主可以考虑这个思路:
1.将所有数字组成一个数组
2.随机提取其中的一个数值
3.从数组中删除这个值
4.重复以上操作
#include <Array.au3>
Dim $NumArray =
Do
$iNum = Random(1, UBound($NumArray), 1)
MsgBox(0, "", "读取到的值:" & $NumArray[$iNum] & @CRLF & @CRLF & "当前数组:" & _ArrayToString($NumArray), 5)
_ArrayDelete($NumArray, $iNum)
Until UBound($NumArray) = 0测试发现偶尔会报错,不知道啥原因,水平有限,请大佬来改吧
邪恶海盗 发表于 2023-12-8 20:05
我觉得撸主可以考虑这个思路:
1.将所有数字组成一个数组
2.随机提取其中的一个数值
找到原因了,数组索引是从0开始的,所以第5行要改$iNum = Random(0, UBound($NumArray)-1, 1),也就是说索引号是从0-4而不是1-5...
#include <Array.au3>
Dim $NumArray = ['A8','B6','A2','C18','b17']
Do
$iNum = Random(0, UBound($NumArray)-1, 1)
MsgBox(0, "", '索引号:'& $iNum & @CRLF & "读取到的值:" & $NumArray[$iNum] & @CRLF & @CRLF & "当前数组:" & _ArrayToString($NumArray) &@CRLF & '元素总数:' & UBound($NumArray))
_ArrayDelete($NumArray, $iNum)
Until UBound($NumArray) = 0
现在应该对了
谢谢邪恶海盗的思路,这个应当算是排除法,这个以后能用到,先收藏~谢谢啦
咋没大佬来点评下我的屎山代码呢??? 使用数组元素交换函数也可以实现这种效果。
#include <array.au3>
Local $Array
For $s = 0 To 49
$Array[$s] = $s + 1
Next
For $s = 0 To 49
_ArraySwap($Array, $s, Random(0, 49, 1))
Next
_ArrayDisplay($Array)
页:
[1]