Oppure

Loading
14/10/09 12:14
swet
salve a tutti sto scrivendo un programma che genera 15 numeri casuali attraverso questo codice:
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
aaa
14/10/09 12:46
ruggy94
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().
aaa
14/10/09 13:31
swet
Ciao grazie della risposta, ho provato con questo codice ma non cambia niente.
   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 :

    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 14/10/09 13:41
aaa
14/10/09 15:04
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).
aaa
14/10/09 17:22
ruggy94
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 :D
aaa
14/10/09 17:34
swet
Ciao Totem, non credo di aver capito quello che intendi , ho provato così :
   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?
aaa
14/10/09 17:50
ruggy94
Una cosa del genere:
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 ;)
aaa
14/10/09 21:37
swet
grazie l' ho riadattato e adesso funziona per potresti spiegarmi cosa significa questa linea? Cosa fa ? grazie!

EstrazioneCorrente= ListNumeri(Rnd.Next(0,ListNumeri.Count)) 



aaa