
swet (Normal User)
Pro
    
Messaggi: 128
Iscritto: 01/01/2009
|
salve a tutti sto scrivendo un programma che genera 15 numeri casuali attraverso questo codice:
Codice sorgente - presumibilmente VB.NET |
Dim numeri As New Random Dim i As Integer = 0 For i = 1 To 15 numeroestratto = numeri.Next(1, 30) Next i
|
Come faccio a escludere i numeri già usciti ?
Grazie
|
|

ruggy94 (Member)
Guru
    
Messaggi: 890
Iscritto: 21/04/2008
|
Postato originariamente da swet:
Come faccio a escludere i numeri già usciti ?
|
Puoi farlo in molti modi.
Semplicemente puoi aggiungere ogni numero che estrai ad una List, dopo aver controllato (con la funzione List.Contains()) che il numero non sia già presente. Se invece lo è, ripeti il Random.Next(). |
|

swet (Normal User)
Pro
    
Messaggi: 128
Iscritto: 01/01/2009
|
Ciao grazie della risposta, ho provato con questo codice ma non cambia niente.
Codice sorgente - presumibilmente VB.NET |
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim rnd As New Random Dim numero As String For i = 1 To 15 numero = ListBox1.Items.Add(rnd.Next(1, 30)) If ListBox1.Items.Contains(numero) = true Then numero = ListBox1.Items.Add(rnd.Next(1, 20)) End If Next i End Sub
|
Ho provato anche con quest'altro codice :
Codice sorgente - presumibilmente VB.NET |
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim rnd As New Random Dim numero As String Dim i As Integer = 1 For i = 1 To 10 numero = ListBox1.Items.Add(rnd.Next(1, 20)) For Each numero In ListBox1.Items If ListBox1.Items.Contains(numero) Then numero = ListBox1.Items.Add(rnd.Next(1, 20)) End If Next Next i End Sub
|
dove sbaglio? Ultima modifica effettuata da swet il 14/10/2009 alle 15:41 |
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Inutile. Basta creare una lista con gli elementi da estrarre e sorteggiare un indice compreso tra 0 e Count - 1. Quindi, è sufficiente eliminare l'elemento scelto e ripetere il sorteggio tra quelli restanti (la lista conterrà un elemento in meno).
|
|

ruggy94 (Member)
Guru
    
Messaggi: 890
Iscritto: 21/04/2008
|
Postato originariamente da Il Totem:
Inutile. Basta creare una lista con gli elementi da estrarre e sorteggiare un indice compreso tra 0 e Count - 1. Quindi, è sufficiente eliminare l'elemento scelto e ripetere il sorteggio tra quelli restanti (la lista conterrà un elemento in meno). |
Ci avevo pensato, ma credevo che fosse pesante aggiungere tutti i numeri ad una lista. Ripensandoci però, un If è molto peggio |
|

swet (Normal User)
Pro
    
Messaggi: 128
Iscritto: 01/01/2009
|
Ciao Totem, non credo di aver capito quello che intendi , ho provato così :
Codice sorgente - presumibilmente VB.NET |
Dim rnd As New Random Dim numerocasuale As String Dim lista As ArrayList lista = New ArrayList 'aggiunge tutti i numeri da 1 a 20 nella listbox For i = 1 To 20 i = ++i Lista.add(i) Next 'estrae un indice casuale compreso tra 0 e il contatore - 1 For i = 1 To 10 ListBox1.Items.Add(rnd.Next(0, 20)) numerocasuale = rnd.Next(0, i - 1) ListBox1.Items.Remove(numerocasuale) Next
|
ma niente è cambiato... Dove sbaglio?
|
|

ruggy94 (Member)
Guru
    
Messaggi: 890
Iscritto: 21/04/2008
|
Una cosa del genere:
Codice sorgente - presumibilmente VB.NET |
Dim ListNumeri as new List(of Int16) Dim ListEstratti as new List(of Int16) Dim EstrazioneCorrente as int16 Dim Rnd as new Random private Sub CreaLista() For I as int16 = 1 to 20 ListNumeri.Add(I) Next I End Sub private Sub EstraiNumeri() For X as int16 = 0 to 9 'estrae 10 numeri differenti EstrazioneCorrente= ListNumeri(Rnd.Next(0,ListNumeri.Count)) ListEstratti.Add(EstrazioneCorrente) ListNumeri.Remove(EstrazioneCorrente) Next X End sub
|
Chiaramente puoi cambiare tutti i valori a seconda delle tue esigenze.
Inoltre mi scuso anticipatamente per gli errori che posso aver commesso, dato che ho scritto il codice senza l'IDE e quindi non l'ho nemmeno testato
|
|

swet (Normal User)
Pro
    
Messaggi: 128
Iscritto: 01/01/2009
|
grazie l' ho riadattato e adesso funziona per potresti spiegarmi cosa significa questa linea? Cosa fa ? grazie!
Codice sorgente - presumibilmente Plain Text |
EstrazioneCorrente= ListNumeri(Rnd.Next(0,ListNumeri.Count))
|
|
|

GoLDBeRG (Ex-Member)
Expert
    
Messaggi: 331
Iscritto: 19/12/2005
|
ma perche usare list next cioe vi complicate la vita....
nn era meglio fare una cosa del genere
arraylist pippo
0
1
2
3
4
5
6
7
8
9
dim pippo2 as new arraylist
randomize()
for g as integer=0 to 10
riprova:
dim casuale as integer=math.round(rnd*pippo.count-1)
if pippo2.contains(casuale)=false then
pippo2.add(casuale)
HO IL NUMERO NON ANCORA USCITO
else
goto riprova
end if
next
|
|