Números aleatorios en C#
La generación de números aleatoreos es una de las prácticas más importantes en cualquier lenguaje de programación, sobre todo cuando deseamos desarrollar juegos, por ejemplo. Para usar números aleatorios en C# podemos utilizar la clase Random del namespace System, de la siguiente manera:
Random objeto = new Random(); int numero = objeto.Next();
El método Next de la clase Random genera y devuelve un número aleatorio entre 0 y la constante Int32.MaxValue (2,147,483,647). El número es generado después de (como decía mi profesora de matemáticas) complejos procesos matemáticos, y como en casi todos los lenguajes necesitan de una semilla (seed) para ser generados, que por defecto es la hora del sistema.
Aún así, muchas veces necesitamos que el número sea generado en un rango específico de valores. Por ejemplo, para una aplicación que simule el lanzamiento de un dado de seis caras necesitamos generar números entre 1 y 6. Para lograr esto, el método Next puede recibir además un entero que indica el rango máximo del número aleatorio. Por ejemplo, el código:
Random objeto = new Random(); int numero = objeto.Next(6);
generaría un número aleatorio entre 0 y 7 (pero no 6), es decir, seis posibles números. Pero, si desearamos algún rango más exacto, podríamos hacer algo como:
Random objeto = new Random(); int numero = objeto.Next(1, 7);
lo que generaría números entre 1 y 7 (pero no 7), de nuevo seis números posibles.
Ejemplo completo…
En el siguiente ejemplo se utilizará la clase Random para generar una serie de números aleatorios cada vez que se presiona un botón:

El código lo pongo para su descarga abajo, ya que lo hice con Gtk# usando MonoDevelop, y sería engorroso poner todo el código. Así que solo pondré la parte del código que nos interesa:
private Random obj = new Random();
//Método ejecutado al presionar el botón
protected virtual void generar_Click (object sender, System.EventArgs e)
{
etiqueta.Text = "";
for(int i = 0; i < 4 ; i++)
{
for(int j = 0; j < 4 ; j++)
etiqueta.Text += obj.Next(1, 10) +"\t\t";
etiqueta.Text += "\n\n";
}
}
Enlaces y descargas
- Descargar código fuente del ejemplo (usando Gtk#)
- Descargar proyecto similar en inglés (usando Windows Forms)
- Aplicaciones con GUI en .NET: ¿Gtk# o Windows Forms?
10 Comentarios | deja el tuyo



Hola como estas un saluldo, estoy interesado en formar una nueva seccion en Opensuse Latino referente a Mono Developer, con los lenguajes que este soporte C, C++, C#, GTK#, ASP.NET, etc.. y la verdad yo estoy en cascaron referente a programacion, y ando pidiendo tu apoyo para que este proyecto de apoyo a MonoDeveloper sea una realidad, ando buscando personas que esten interesadas en compartir sus conocimientos de estos lenguajes orientados a Gnu/Linux con el entorno de programacion de MonoDeveloper, si te interesa apoyar a este proyecto o conoces gente que pudiera estar interesada pasales mi correo o mandame un correo mi E-Mail es obelich@gmail.com y en el portal de opensuse latino tambien e puesto la nota sobre esta solicitud y tambien en algunos foros de programacion
http://opensuseltn.org
hola, si yo quiero que llenar un arreglo con valores generados por random, pero quiero que los números no superen el número de elementos que tiene el arreglo y no repita número que debo hacer? he utilizado la clase
aleatorio.NextBytes(valor);
donde “valor” es el arreglo de bytes,le asigna valores a los elementos pero estos valores van de 0 hasta 0xFF y no hasta 16. utilice la clase .next() pero repite número en el arreglo y tampoco quiero que no lo haga.
Hola geman…
Si eso es lo que quieres, ¡prográmalo! No es difícil. Desconozco la existencia de algún método que haga eso que quieres, pero es tan simple que te demoras menos implementándolo que buscando información.
Lo único que hay que hacer es revisar antes de meter un número generado al arreglo. Con revisar me refiero a verificar que no esté repetido. Si está repetido, pues generas otro, sino pues lo metes.
Un saludo.
gracias por la ayuda, ya lo habia contemplado pero no lo había hecho, estamos en contacto.
hola soy denis estos interasedo en toda la informacion de c#, especialmente del juego de dado del 1 al 7 gracias
Una pregunta: ¿Hay que incluir alguna libreria? porque me da el siguiente error en la declaracion Random: “No se puede encontrar el tipo o el nombre de espacio de nombres ‘Random’ (¿falta una directiva using o una referencia de ensamblado?)”
Hola, muy buen ejemplo de la clase Random. Vctr, debes poner en el principio de tu codigo la sentencia:
using System;
Saludos.
Yo tengo un problema, y esque hago un ciclo de 50 o 20 y el problema es que lo hace tan rapido que los 50 numeros que genera son el mismo o si hago 100 me genera 90 numeros 3 y 10 numeros 5. Alguna sugerencia?
OK problema solucionado, nunca intenten crear el objeto Random dentro del ciclo, porque pasara eso XD…