webForumDet fria alternativet
Logga in / Bli medlem

Slumpa tal??

ASP

2 svar · 218 visningar · startad av slurken

Medlem sedan juni 200152 inlägg
Trådstart#1

Om man har en funktion som returnerar ett slump tal. Om jag nu anropar den exempelvis 20 gånger vill jag att samma tal inte får returneras flera gånger. Jag vill alltså ha 20 olika tal.

Hur löser man detta på bästa sätt?

Medlem sedan dec. 200012 464 inlägg
#2

Du får väl ha en array där du lagrar talen och sedan får du göra en check när tar fram ett nytt tal. Ungefär

Dim numbers(19)
Dim i,j,r,unique

randomize
for i = 0 to 19
    unique = true
    do 
        r = yourrndfunction(yourrndparameters)
        if  i > 0 then
            for j = 0 to i - 1
                if r = numbers(j) then
                   unique = false
                   exit for
                end if
            next
        end if
        if  unique then
            exit do
        end if
        unique = true
    loop
    numbers(i) = r
next
Medlem sedan mars 20002 836 inlägg
#3

hello,

denna slumpar fram x antal unika nummer från n antal nummer:

	'## -- returnerar en kommaterad sträng av unika nummer --
	Private Function getUniqueNo(ByVal HowManyNumbers, ByVal FromTotalNumbers) ' As String
		Dim m_strNumbers
		Dim m_intUniqueNo
		
		'## -- kolla så att antal unika nummer man vill ha inte
		'##    överstiger det antal nummer att välja från --
		If HowManyNumbers > FromTotalNumbers Then Exit Function

		m_strNumbers = ""
		
		Randomize
		
		For I = 1 To HowManyNumbers
			
			m_intUniqueNo = Cint((rnd*FromTotalNumbers) + 0.5)
			If InStr(m_strNumbers,"#" & m_intUniqueNo & ",") > 0 Then
				I = I - 1
			Else
				m_strNumbers = m_strNumbers & "#" & m_intUniqueNo & ","
			End If
		Next
		m_strNumbers = Replace(m_strNumbers,"#","")
		m_strNumbers = Left(m_strNumbers,Len(m_strNumbers) - 1)
		getUniqueNo = m_strNumbers
	End Function

Använd den så här:

'## -- hur många unika nummer som ska returneras --
intTotUniqueNo = 5 

'## -- hur många nummer att välja från --
intTotNo = 20

'## -- hämta 5 slumpade tal från 1 - 20 --
strUniqueNo = getUniqueNo(intTotUniqueNo, intTotNo)

Nu kan du lätt splitta upp den returnerade strängen:

arrNumbers = Split(strUniqueNo,",")

cya,
PatrikB

262 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)