webForumDet fria alternativet

Slumpa med array

3 svar · 349 visningar · startad av Danielkun

DanielkunMedlem sedan maj 2003361 inlägg
#1

Hur skulle en bit kod se ut som Slumpar fram ett tal och sedan kollar om detta tal finns i en array eller inte?

Om talet finns så slumpar den fram ett nytt tal ända tills ett tal som inte finns med i arrayen kommer upp.

Då fortsätter koden..

Jag vet hur man slumpar, men jag kommer inte riktigt på hur jag ska bygga dessa loopar.

dAEkMedlem sedan feb. 20041 816 inlägg
#2

Här är ett sätt...

Om det slumpade talet finns i arrayen slumpas ett nytt tal fram tills att det inte finns i arrayen.

[nedan slumpas ett tal mellan 1-25]

Option Explicit

Dim iArray(13)
    iArray(0)  = 1
    iArray(1)  = 2
    iArray(2)  = 3
    iArray(3)  = 4
    iArray(4)  = 5
    iArray(5)  = 6
    iArray(6)  = 7
    iArray(7)  = 8
    iArray(8)  = 9
    iArray(9)  = 10
    iArray(10) = 11
    iArray(11) = 12
    iArray(12) = 13
    iArray(13) = 14

Dim arrLen, rndNumber
arrLen = clng(UBound(iArray))

Randomize
rndNumber = clng((24-1 +1)*Rnd() +1)

Call chkRndNumber(rndNumber)

Sub chkRndNumber(lngNumber)
	Dim i
	Dim bMatch
	    bMatch = false
	
	for i=0 to arrLen
		if (CLng(iArray(i)) = CLng(lngNumber)) then 
			bMatch = true
			exit for
		end if
	next
	
	if (bMatch) then '// talet finns i arrayen, slumpa fram ett nytt och jämför det mot arrayen
		Response.write(lngNumber  &" finns, slumpar på nytt")
		Randomize
		rndNumber = clng((24-1 +1)*Rnd() +1)
		Call chkRndNumber(rndNumber)
	else 
		Response.write(lngNumber &" finns ej, fortsätt...")
	end if
end Sub
PDahlenMedlem sedan apr. 2004778 inlägg
#3

* REDIGERAD *

Skräp också. Är tydligen så trött och bakfull att jag inte ens kan läsa den ursprungliga frågan ordentligt.

Men, men. Nedan är i alla fall en funktion för att enkelt kunna slumpa fram något ur en array. :)

En fråga, varför göra en koll om numret finns? Är det inte bättre att ta fram storleken på din array och sedan ta fram en slumpad siffra mellan 0 och arraystorleken. Sedan ta fram det som finns i array(slumpsiffra).

Defitionen av Rnd
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

Dim iArray(13)
    iArray(0)  = 1
    iArray(1)  = 2
    iArray(2)  = 3
    iArray(3)  = 4
    iArray(4)  = 5
    iArray(5)  = 6
    iArray(6)  = 7
    iArray(7)  = 8
    iArray(8)  = 9
    iArray(9)  = 10
    iArray(10) = 11
    iArray(11) = 12
    iArray(12) = 13
    iArray(13) = 14

Dim arrLen, rndNumber
arrLen = clng(UBound(iArray))

Randomize
rndNumber = Int((arrLen - 0 + 1) * Rnd + 0)

Response.Write iArray(rndNumber)
DanielkunMedlem sedan maj 2003361 inlägg
#4

Tack för svaren!!
Nu fick jag precis svar på det jag tänkte på tidigare!

PDahlen, tanken är att jag ska ta ut 200 (av 3000) poster ur en databas utan att få dubbletter, och då tänkte jag spara in ID't för varje post jag använt i en array. Och sedan kolla om den finns i arreyen allt eftersom jag slumpar vidare

128 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)