slurkenMedlem sedan juni 200152 inlägg 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?
------------------
jag är inte där du är
LarsGMedlem sedan dec. 200012 464 inlägg 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
------------------
essentitia preter non sans multiplicandum
PatrikBMedlem sedan mars 20002 836 inlägg 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
------------------
*Det jämnar ut sig sa han som sket i byxan och satte sig ned*
[Redigerat av PatrikB den 08 jun 2001]