Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Array di Random unici
Forum - C# / VB.NET - Array di Random unici

Avatar
kopiro91 (Member)
Newbie


Messaggi: 20
Iscritto: 23/07/2008

Segnala al moderatore
Postato alle 20:18
Venerdì, 20/03/2009
Chi mi aiuta a generare un array di numeri casuali unici in vb.net

PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 10:49
Sabato, 21/03/2009
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


Codice sorgente - presumibilmente VB.NET

  1. Module Module1
  2.  
  3.     Sub Main()
  4.         Const NUMERO_ELEMENTI_VETTORE As Integer = 10
  5.         Dim generatore As Random
  6.         Dim vettore(NUMERO_ELEMENTI_VETTORE - 1) As Integer
  7.         generatore = New Random()
  8.  
  9.         'per il numero di elementi del vettore
  10.  
  11.         For i As Integer = 0 To NUMERO_ELEMENTI_VETTORE - 1
  12.  
  13.             'genera un numero casuale
  14.  
  15.             vettore(i) = generatore.Next()
  16.  
  17.             'finchè il numero generato è già presente nel vettore
  18.             'rigenera il valore
  19.  
  20.             While (Not Verifica(vettore, i, vettore(i)))
  21.                 vettore(i) = generatore.Next()
  22.             End While
  23.         Next
  24.  
  25.         For j As Integer = 0 To NUMERO_ELEMENTI_VETTORE - 1
  26.             Console.WriteLine(vettore(j))
  27.         Next
  28.  
  29.         Console.ReadLine()
  30.  
  31.     End Sub
  32.  
  33.     'Verifica se un numero è già presente in un vettore
  34.     'v : vettore da esaminare
  35.     'N : elementi da esaminare partendo dall'indice 0 del vettore
  36.     'val : elemento da cercare
  37.  
  38.     Function Verifica(ByVal v() As Integer, ByVal N As Integer, ByVal val As Integer) As Boolean
  39.         Dim unico As Boolean = True
  40.         Dim i As Integer = 0
  41.  
  42.         'finchè non trova il valore o non esamina il sottovettore
  43.  
  44.         While (i < N And unico)
  45.  
  46.             'verifica se l'elemento di indice i è uguale a val
  47.  
  48.             If (v(i) = val) Then
  49.                 unico = False
  50.             Else
  51.                 i = i + 1
  52.             End If
  53.         End While
  54.  
  55.         Return unico
  56.  
  57.     End Function
  58.  
  59. End Module



Spero di esserti stato di aiuto :)

Ultima modifica effettuata da andrea.b89 il 21/03/2009 alle 11:00
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 14:41
Sabato, 21/03/2009
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.

PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 16:43
Sabato, 21/03/2009
Testo quotato

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 il 21/03/2009 alle 16:45
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:21
Domenica, 22/03/2009
Come preferisci... con 10 elementi ne valeva la pena.

PM Quote