for ($i = 0 ; $i -lt 4 ; $i++){
$array[$i] = @(get-random -input 1, 2, 3, 4, 5, 6 ,7 ,8, 9 ,0)
for ($j = 0 ; $j -lt $i ; ){
if ($array[$j] -eq $array[$i]){
$array[$i] = @(get-random -input 1, 2, 3, 4, 5, 6 ,7 ,8, 9 ,0)
$j =0
} else {
$j++
}
}
}
$array
目標:產生四數位不同數值的亂數。
問題:會產生出重覆數值。EX,$array 丟出來的值為[5008],其中的00為重覆值。
求各先進幫忙解惑一下,為何還是會出現重覆數值?是否能提點一下小弟該往哪個方向思考呢?
這符號真看不習慣,
不過你不需要$j++嗎?
另外,
你的第二個for迴圈外面可能要再加個while來判斷,
只不過這種不重複的問題通常會建議用撲克牌的方式來處理.
洗牌演算法
每種語言的語法會有些不同,
不過邏輯都是一樣的.
$shuffle = (0..9)
function arrayShuffle([int[]]$s){
$count = $s.count
$r = @()
for ($i -eq 0; $i -lt $count; $i++){
$_r = Get-Random -input $s
$s = $s| Where-Object { $_ –ne $_r }
$r = $r + [array]$_r
}
return $r
}
write-host((arrayShuffle $shuffle)[0..3])
甚至只想洗指定次數都可以...
$shuffle = (0..9)
function arrayShuffle([int]$t,[int[]]$s){
if ($t -lt $s.count){
$count = $t
}else{
$count = $s.count
}
$r = @()
for ($i -eq 0; $i -lt $count; $i++){
$_r = Get-Random -input $s
$s = $s| Where-Object { $_ –ne $_r }
$r = $r + [array]$_r
}
return $r
}
write-host((arrayShuffle 4 $shuffle))
write-host((arrayShuffle 9 $shuffle))
write-host((arrayShuffle 11 $shuffle))
你的寫法就重複在0到9中取隨機數4次,當然會重複,程式要想好再寫,你寫的根本就沒道理。