dahuasnoopy 发表于 2023-12-8 17:47:56

打乱数字顺序并读取?

比如我要把1-50的数字打乱,然后进行读取,应该怎么做呢?
如果我随机读取是可以读取到其中一个数字,但是我需要读取50次,后续的读取中就不能再有这个数字了
For $i = 1 To 50 Step +1
$suiji = Random (1,50,1)
msgbox (4096,'shuzi',$suiji)
Next
这样的思路不行,大神有好的办法没有?

zghwelcome 发表于 2023-12-8 19:12:34

#include <array.au3>
Local $aAry
For $i = 0 To UBound($aAry) - 1
        $aAry[$i] = $i + 1
Next
_ArrayShuffle($aAry)
_ArrayDisplay($aAry)



dahuasnoopy 发表于 2023-12-8 19:27:17

数组重组~谢谢大佬,有思路了,我去试试

邪恶海盗 发表于 2023-12-8 20:05:51

我觉得撸主可以考虑这个思路:
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:13:14

邪恶海盗 发表于 2023-12-8 20:05
我觉得撸主可以考虑这个思路:
1.将所有数字组成一个数组
2.随机提取其中的一个数值


找到原因了,数组索引是从0开始的,所以第5行要改$iNum = Random(0, UBound($NumArray)-1, 1),也就是说索引号是从0-4而不是1-5...

邪恶海盗 发表于 2023-12-8 20:21:31

#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
现在应该对了


dahuasnoopy 发表于 2023-12-8 21:27:32

谢谢邪恶海盗的思路,这个应当算是排除法,这个以后能用到,先收藏~谢谢啦

邪恶海盗 发表于 2023-12-10 22:02:48

咋没大佬来点评下我的屎山代码呢???

gyp2000 发表于 2023-12-11 21:28:30

使用数组元素交换函数也可以实现这种效果。
#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]
查看完整版本: 打乱数字顺序并读取?