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