Oppure

Loading
20/03/09 19:18
kopiro91
Chi mi aiuta a generare un array di numeri casuali unici in vb.net
aaa
21/03/09 9:49
andrea.b89
Un modo semplice per farlo è quello di :
1 - Generare un numero casuale
2 - Verificare se è già presente all'interno del vettore
3 - Se non è presente lo si aggiunge alla posizione i del vettore e poi si incrementa i
4 - Se è già presente nel vettore riprendi dal punto 1

Ecco il codice


Module Module1

    Sub Main()
        Const NUMERO_ELEMENTI_VETTORE As Integer = 10
        Dim generatore As Random
        Dim vettore(NUMERO_ELEMENTI_VETTORE - 1) As Integer
        generatore = New Random()

        'per il numero di elementi del vettore

        For i As Integer = 0 To NUMERO_ELEMENTI_VETTORE - 1

            'genera un numero casuale

            vettore(i) = generatore.Next()

            'finchè il numero generato è già presente nel vettore
            'rigenera il valore

            While (Not Verifica(vettore, i, vettore(i)))
                vettore(i) = generatore.Next()
            End While
        Next

        For j As Integer = 0 To NUMERO_ELEMENTI_VETTORE - 1
            Console.WriteLine(vettore(j))
        Next

        Console.ReadLine()

    End Sub

    'Verifica se un numero è già presente in un vettore
    'v : vettore da esaminare
    'N : elementi da esaminare partendo dall'indice 0 del vettore
    'val : elemento da cercare

    Function Verifica(ByVal v() As Integer, ByVal N As Integer, ByVal val As Integer) As Boolean
        Dim unico As Boolean = True
        Dim i As Integer = 0

        'finchè non trova il valore o non esamina il sottovettore

        While (i < N And unico)

            'verifica se l'elemento di indice i è uguale a val

            If (v(i) = val) Then
                unico = False
            Else
                i = i + 1
            End If
        End While

        Return unico

    End Function

End Module


Spero di esserti stato di aiuto :)
Ultima modifica effettuata da andrea.b89 21/03/09 10:00
aaa
21/03/09 13:41
Il Totem
La verifica può essere fatta anche con la funzione Array.IndexOf(array, elemento): se il numero restituito è -1, l'elemento specificato non esiste nell'array.
aaa
21/03/09 15:43
andrea.b89
Postato originariamente da Il Totem:

La verifica può essere fatta anche con la funzione Array.IndexOf(array, elemento): se il numero restituito è -1, l'elemento specificato non esiste nell'array.


Si, quella è un'altra possibilità, Tuttavia più dispendiosa.
La IndexOf funziona meglio sulle liste dove scorre al massimo gli elementi inseriti, mentre nei vettori scorre tutto l'array, del tipo se ho "inserito" 3 elementi ma il vettore ha dimensione 2000 la funzione mi scorre 2000 elementi.
Al massimo si può usare l'overload Array.IndexOf(array, elemento, indiceIniziale, numeroElementi).

Comunque tralasciando l'aspetto delle prestazioni il mio scopo era quello di mostrargli una possibile strategia e relativa implementazione per risolvere il problema. :)
Ultima modifica effettuata da andrea.b89 21/03/09 15:45
aaa
22/03/09 11:21
Il Totem
Come preferisci... con 10 elementi ne valeva la pena.
aaa