2012-11-24 6 views
29

Mi stavo chiedendo come funziona il generatore di numeri casuali in C#. Ero anche curioso di sapere come creare un programma che generi numeri casuali INTERO INTEGER da 1 a 100.Come funziona il generatore di numeri casuali di C#?

+2

Casuale casuale = nuovo Casuale(); random.Next (1, 101); // Include 1 e 100 random.Next (1, 100); // Include 1 ed esclude 100 – AmazingDreams

+3

@AmazingDreams: No, il limite inferiore è * incluso *. –

+0

@JonSkeet Grazie, è passato un po 'di tempo da quando l'ho usato. Fatto una modifica – AmazingDreams

risposta

20

Mi stavo chiedendo come il generatore di numeri casuali in C# lavori.

Questo è specifico dell'implementazione, ma lo wikipedia entry for pseudo-random number generators dovrebbe darvi qualche idea.

Ero anche curioso di sapere come creare un programma che generi numeri INTERO INTERO a caso da 1 a 100.

È possibile utilizzare Random.Next(int, int):

Random rng = new Random(); 
for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine(rng.Next(1, 101)); 
} 

Si noti che il limite superiore è esclusivo - ed è per questo che ho usato 101 qui.

Si dovrebbe anche essere a conoscenza di alcuni dei "trucchi" associati Random - in particolare, si dovrebbe non creare una nuova istanza ogni volta che si desidera generare un numero casuale, altrimenti se generate un sacco di casuale numeri in un breve lasso di tempo, vedrai molte ripetizioni. Vedi my article on this topic per maggiori dettagli.

+0

Potrei semplicemente dire qualcosa come "Casuale casuale = nuovo Random.Next (0, 101);"? –

+2

@SethTaddiken: No, non puoi. (E il mio nome è Jon, non John.) Sulla base delle tue domande finora, ti suggerisco caldamente di procurarti un buon libro introduttivo in C#. È probabile che sia molto più efficace per l'apprendimento iniziale rispetto a chiedere qui. –

+0

Bene, puoi lavorare su un libro e hai ancora bisogno di aiuto quando cerchi di giocare con i diversi programmi e le informazioni non sono immediatamente disponibili. – Danrex

32

È possibile utilizzare Random.Next(int maxValue):

ritorno: A a 32 bit firmato intero maggiore o uguale a zero, e meno di maxValue; ovvero, l'intervallo dei valori di ritorno include normalmente lo zero ma non il valore massimo. Tuttavia, se maxValue è uguale a zero, maxValue è restituito .

var r = new Random(); 
// print random integer >= 0 and < 100 
Console.WriteLine(r.Next(100)); 

Per questo caso però si potrebbe usare Random.Next(int minValue, int maxValue), in questo modo:

// print random integer >= 1 and < 101 
Console.WriteLine(r.Next(1, 101);) 
// or perhaps (if you have this specific case) 
Console.WriteLine(r.Next(100) + 1); 
+0

Grazie des :). Funziona alla grande –

+0

@SethTaddiken: Beh, non fa quello che tu * chiedi * per, che è un numero compreso tra 1 e 100. Non ti darà mai 100, ma * ti * darà 0. Inoltre, dovresti assicurarti di capisco davvero che non dovresti creare una nuova istanza di 'Random' ogni volta. –

+0

Che aspetto avrebbe una variabile se stampassi un numero casuale compreso tra 1 e 100? –

1

Ho cercato Internet per RNG per un po 'di tempo. Tutto quello che ho visto era troppo complesso o semplicemente non era quello che stavo cercando. Dopo aver letto alcuni articoli sono riuscito a trovare questo semplice codice.

{ 
    Random rnd = new Random(DateTime.Now.Millisecond); 
    int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 }; 
    textBox1.Text = Convert.ToString(b[rnd.Next(10)]) 
} 

semplice spiegazione,

  1. creare una matrice bidimensionale 1 intero.
  2. riempire l'array con numeri non ordinati.
  3. utilizzare il comando rnd.Next per ottenere la posizione del numero che verrà selezionato.

Questo funziona bene.

Per ottenere un numero casuale di 100 uso

{ 
    Random rnd = new Random(DateTime.Now.Millisecond); 
    int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 }; 
    int[] d = new int[10] { 9, 4, 7, 2, 8, 0, 5, 1, 3, 4 }; 
    textBox1.Text = Convert.ToString(b[rnd.Next(10)]) + Convert.ToString(d[rnd.Next(10)]); 
} 

e così via per 3, 4, 5, e 6 ... numeri casuali cifre.

Spero che questo aiuti qualcuno positivamente.

+1

rnd.Next (10) ti fornisce già un numero nell'intervallo che ti serve. non hai bisogno di una serie di numeri tra 1 ~ 10 per cercare – AaA