Tjena! En slumpfunktion kan aldrig bli riktig slump. Hänger inte riktigt med på det svaret. Grejen är den att jag skall slumpa fram 10 tal som sedan skall placeras ut på 10 st commandbutton och det får inte vara samma siffra på någon knapp. Hur gör jag då? (Jag är ganska grön i vb) Hej Ser tillkrånglat ut. Ber om ursäkt. Tog Fredriks kod och gjorde om lite grand. Hej här har du ett förslag som jag tror du kommer bli nöjd med. Det använder >Ber om ursäkt. Tog Fredriks kod och gjorde om lite grand. Usch förlåt Niklas *skäms*Slupma utan återlägg i vb??
Hur gör man om man tex vill slumpa fram 10 tal utan att få några dubbletter. om man slumpar så att samma siffror kan komma flera gånger så är det ju bara någon form av for-loop, men hur gör man om man vill slumpa utan "återlägg"Sv: Slupma utan återlägg i vb??
Slumpen som fínns innbyggd är dock tillräcklig för de program man gör i VB.
Att säga "utan dubletter" är lite dumt. Det beror på vad du menar. Om det är ett visst antal heltal du vill ha så är dubletter helt logiskt. Om du menar flyttal är det högst ovanligt med dubletter.
Om du menar att du exempelvis vill blanda en kortlek finns bättre sätt.
Ett sätt att få bort dubletter kan annars se ut så här:
<code>
Dim i as Integer, j as Integer
Dim Tal (1 to 20) as Integer
Dim Fel as Boolean
Randomize
For i=1 to 20
Do
Tal(i) = Rnd*20 + 1
Fel=False
For j=1 to i
If Tal(i)=Tal(j) Then Fel=True
Next j
Loop While Fel
Next i
</code>
Hoppas det hjälper!
/Niklas JanssonSv: Slupma utan återlägg i vb??
Sv: Slupma utan återlägg i vb??
Bestäm vilket min och maxvärde du vill slumpa talen inom.
Använd dig av en array av knappar(annars fungerar inte följande kod)
Har inte testat koden men den bör se ut ungefär som följer för att slumpa tal till dina tio knappar inom valfritt intervall.
//Emma
<code>
Dim i as Integer, j as Integer
dim min as integer, max as integer
Dim finns as Boolean
dim raknare as integer
Randomize
min = 10
max 100
raknare = 1
Dim Tallista (min to max) as Integer 'skapar en array som kommer att hålla i dina tal
do
Tal = Rnd*max + min 'slumpar fram ett tal i intervallet min - max
finns = false 'utgår från att det framslumpade talet inte finns
For j=min to i 'går igenom din lista med tal
If Tal=Tallista(j) Then
Finns=True 'om talet finns med i lista sätts finns till true
Next j
if not finns then 'om talet inte fanns i listan
raknare = raknare + 1
tallista(i) = tal
command(raknare) = tal
end if
Next i
loop until raknare = 10 'görs tills alla dina 10 knappar fått en siffra
</code>Sv: Slupma utan återlägg i vb??
Dessutom, har man följande kod,
...
> For j=min to i 'går igenom din lista med tal
...
> Next i
så borde det väl finns ett
For i=...
någontsans, eller?Sv: Slupma utan återlägg i vb??
For j=min to i ska vara
For j = min to max
och
next i ska strykas
//EmmaSv: Slupma utan återlägg i vb??
ett collectionobjekt för att lagra talen i. Med hjälp av key-attributet kan
man hålla reda på om ett tal redan existerar i din collection. Finns inte
talet så läggs detta till. När loopen är klar har du en collection av tio olika
tal i slumpvis ordning. Det är bara att loopa din collection och plocka ut
talen i önskad ordning.
Private Sub Command1_Click()
Dim slumpTal As New Collection
Dim slump As Integer
On Error Resume Next '// Slå av felhantering
Do
slump = Int(10 * Rnd) '// Slump 0-9
If slumpTal.Item(CStr(slump)) Is Nothing Then '// Kolla om talet finns i collection
slumpTal.Add Item:=slump, Key:=CStr(slump) '// Om inte så lägg till talet
End If
Loop Until slumpTal.Count = 10 '// Loopa tills vi fått tio tal
On Error GoTo 0 '// Slå på felhantering
End Sub
/peterhSv: Slupma utan återlägg i vb??
Fredriks?? Nåja...
Om det är ett visst antal heltal gillar jag det här sättet bättre:
<code>
Dim Talen(1 To 10) As Integer
Dim i As Integer
Dim Temp As Integer
Dim Slump as Integer
For i=1 to 10
Talen(i)=i
Next i
For i=1 to 10
Slump=Rnd*10+1
'Swappa talen
Temp=Talen(i)
Talen(i)=Talen(Slump)
Talen(Slump)=Temp
Next i
</code>
På det här sättet behöver man inte kolla igenom listan varje gång, och den är garanterat blandad. Om man sedan vill blanda den mer behövs bara den sista biten.
/Niklas JanssonSv: Slupma utan återlägg i vb??
Satt och var lite sömnig... gick upp lite tidigare än jag borde tydligen...
//Emma - ber Niklas om ursäkt än en gång!