Generare un numero random in c#

Per generare un numero random in ASP.NET (c#) dobbiamo istanziare un istanza dell’oggetto RANDOM (System.Random):

Random RandomClass = new Random();

A questo punto  possiamo scegliere se creare un numero casuale tra 0  e 2.147.483.647:

int RandomNumber = RandomClass.Next();

oppure se dare dei parametri per la generazione di un numero da … a…:

int RandomNumber = RandomClass.Next(4, 14);

Se invece vogliamo solamente stabilire il massimo numero generabile possiamo usare:

int RandomNumber = RandomClass.Next(14);

 

La stessa cosa vale per la generazione di un numero float, cambiando però il metodo che chiamiamo:

double RandomNumber = RandomClass.NextDouble();

 

Le specifiche dell’oggetto complete su MSDN.

Loading Facebook Comments ...

6 pensieri su “Generare un numero random in c#

  1. Michele

    Ciao
    io sto usando l'opzione NextDouble dato che mi serve un num random tra 0 e 1.
    per fare un test ho fatto un ciclo da 200 esecuzioni che genera e visualizza il numero…
    il risultato è lo stesso a gruppi di 10/20 esecuzioni…penso che sia dovuto ai tempi con cui si aggiorna il meccanismo sul quale si basa la generazione del numero…giusto?
    E' possibile  evitare una cosa del genere?
    grazie mille ciao
     
    Michele

    Rispondi
  2. Othello

    Lo strumento di generazione di numeri casuali crea sequenze di numeri “pseudo casuali” basandosi sul numero di “seme” su cui viene visualizzato.

    Il seme è il numero usato per l’inizializzazione, e consente, a parità di seme (seed), di generare la stessa sequenza di numeri casuali. Questo per quanto astruso, serve per consentire la ripetibilità degli esperimenti.

    Quindi…come fare ad avere numeri “veramente casuali”? Direi che una buona tecnica potrebbe essere quella di rendere random il seme di inizializzazione, o, più semplicemente usare l’istante di inizializzazione come seme. Ad esempio:

    Random rm = new Random((int)DateTime.Now.Ticks);

    Rispondi
  3. Othello

    Dimenticavo…

    Inizializzate meno volte possibile il Random, questo per ovviare a problemi di performance e soprattutto per non incappare in rogne…

    Un esempio è più chiaro:
    Codice corretto:
    Random rm = new Random(1);
    for (int i = 0; i < 5; i++)
    {
    Console.Write(rm.Next());
    Console.Write(" ");
    }
    Output: 534011718 237820880 1002897798 1657007234 1412011072

    Codice sbagliato:
    for (int i = 0; i < 5; i++)
    {
    Random rm = new Random(1);
    Console.Write(rm.Next());
    Console.Write(" ");
    }
    Output: 534011718 534011718 534011718 534011718 534011718

    Ovviamente la seconda serie NON è casuale 😀

    Rispondi
  4. ivan

    Ciao, vorrei chiederti, siccome devo creare per la scuola una tombola in wpf, ho creato un vettore di 90 e gli ho assegnato i numeri da 1 a 90 (cioè quelli del tabellone della tombola), adesso vorrei che il programma estraesse un numero random dal vettore e che lo cancelli dal vettore
    cioè ad esempio che a random capiti il 52 e il numero 52 viene cancellato dal vettore, che diventerà di 89 spazi quindi, in modo che un numero non possa essere estratto 2 volte… come posso fare?

    Rispondi
    1. Merlinox Autore articolo

      Gli array in c# penso siano quanto di peggio possa esistere, nulla a che vedere con php. Mantenendo la tua strada puoi fare invece che un array, una lista con tutti i 90 numeri.
      Con la funzione spiegata estrai un elemento a caso dalla lista ottenendone l’indice con il conteggio elementi della lista. Quindi rimuovi l’elemento dalla lista con removeAt.

      Rispondi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *