Generando números aleatorios con C#

Jul 9, 2009 Programacion Tutoriales C# 34 comentarios

Hace un tiempo recibí un comentario en el que alguien preguntaba como crear un array de números aleatorios. Aunque hice este ejemplo en otro post (no recuerdo cual) vendría bien hablarles un poco más sobre la clase Random del namespace System. La clase Random es la que nos permite hacer unas cuantas cosas con números aleatorios. Yo uso generalmente la uso para probar algoritmos y en alguno que otro proyecto. Luego veremos algunos ejemplos: Aclarar que esta clase no es recomendada para encriptar cosas ni mucho menos, pero si vamos a poder conseguir un número aleatorio bastante respetable. Bueno, vamos ya: En la clase Random con C# (también sirve en ASP.Net) tenemos tres métodos que nos generan un número aleatorio, pero primero de todo tenemos que crear una instancia de la clase Random:

Random r = new Random
// Creamos el objeto Random, que tiene un constructor por defecto
// O para los más exigentes, añadimos un plus de
// aleatoriedad, algo así:
Random r = new Random(DateTime.Now.Millisecond);

Y una vez tenemos el objeto, utilizaremos uno de esos tres métodos.

1.- El método Next Tiene tres sobrecargas:

int aleatorio1 = r.Next();
 
// Le imponemos un máximo
int aleatorio2 = r.Next(100);
 
// Le imponemos un rango, por ejemplo queremos
// un número de 3 cifras
int aleatorio3 = r.Next(100, 999);
 
// Queremos un número entre el 3 y el 12,
int aleatorio4 = r.Next(3, 12);

2.- El método NextDouble

// Devuelve un double entre 0 y 1
int aleatorio5 = r.NextDouble();

3.- El método NextBytes

byte[] buffer = new byte[100];
r.NextBytes(buffer);

¡¡Como ven, es super sencillo trabajar con esta clase, ahora veamos un ejemplo de como trabajar con esta clase.

1 – Crear un array de tamaño aleatorio con números aleatorios. Esto nos puede servir para probar varios métodos que usan arrays (ordenación, búsqueda, etc).

//Inicializamos la clase Random
Random r = new Random();
 
//Creamos un array que va a contener cantidad
//aleatoria de elementos menor que 50.
int [] numeros = new int [r.Next(0,50)];
 
//Recorremos el array y vamos asignando a cada
//posición un número aleatorio
for(int i=0; i<numeros.Lenght; i++)
   numeros[i] = r.Next(0,50);

Y hasta aquí, ya veremos después como es por dentro esta clase…

Compartir:

Relacionados

algunos artículos que te pueden interesar

34 comentarios

Forma parte de nuestra discusión y síguela de cerca

Oye, está muy buena tu explicación la cual se agradece infinitamente, solo una pregunta…. aprovechando de tu generosidad…
para que es el

[ i<numeros.Lenght; ] que está dentro del for
se que “i” es la variable, y que ese ” i<numeros.Lenght; ”
es el hasta…. que. , donde parará el for,
pero en sí que significa, o que es lo que hace, o en dado caso, hasta cuando parará en for ??

Gracias!!!

Autor: TAito | Fecha: Jul 24, 2009.

Esa es la condición de parada. O sea, que se va a hacer lo que quieras (i++ en este caso) mientras se cumpla la condición establecida. Para el ejemplo la condición es que i debe ser menor que numeros.Lenght, que nos devuelve el tamaño del array numeros. Espero haber aclarado tus dudas.

Autor: Tomy | Fecha: Jul 24, 2009.

“numeros.Lenght” es una variable entonces ???

Si es así, ya entendí :o

Gracias por responder!!!

Autor: TAito | Fecha: Jul 26, 2009.

Si, numeros.Lenght es una variable que devuelve el tamaño del array.

Autor: Tomy | Fecha: Jul 26, 2009.

listisimo, agradesco la ayuda prestada :D

me sirvió de mucho

saludetes!!

Autor: TAito | Fecha: Jul 29, 2009.

hola a todos por favor quisiera que me ayudasen con esta sintaxis
x=textbox1.text.length; quisiera saber que trata de hacer este codigo con “length”.
agradecería mucho su ayuda, gracias…

Autor: milton | Fecha: Ago 7, 2009.

Milton, si lees arriba verás como explico que la propiedad .Lenght devuelve la cantidad de elementos de un array. En tu caso devuelve la cantidad de caracteres que hay en el texto escrito en un textbox llamado textbox1.

O sea, cuando hacemos

int x = textbox1.Text.Lenght;

lo que hacemos es acceder a la propiedad Text de textbox1, que nos devuelve un string, y entonces le pedimos a ese string su longitud.

Si hubiéramos escrito en el texbox1 por ejemplo, “puntopeek”, entonces x tomaría valor 9, que son la cantidad de caracteres que tiene el string “puntopeek”.

Espero que hayas entendido.

Autor: Tomy | Fecha: Ago 10, 2009.

no se si alguien podria ayudarme, estoy haciendo un programa con base de datos, uso SQL SERVER 2008 creo el instalador, pero cuando la instalo en otra pc, no encuentra mi base de datos, como puedo hacer para que la base de datos se una a el instalador? si pueden ayudarme por favor escribir a nhicenil@hotmail.com, Gracias de antemano

Autor: Nilo | Fecha: Jul 28, 2010.

Nilo, la instalación de SQL Server no tiene nada que ver con las bases de datos que tengas creadas… hay una opción para exportar tablas de SQL, para luego importarlas después de la instalación en otra PC.

Autor: Tomy | Fecha: Jul 29, 2010.

Hola Tomy para empezar, gracias por responder, creo que no explique bien la pregunta, la volvere a formular sin importar el gestor de base de datos que use, la pregunta es, como puedo hacer para crear el instalador y que al crearlo lleve tb la base de datos por que cuando instalo el programa que cree en otra pc me pide la base de datos, si alguien podria ayudarme con eso gracias xD

Autor: Nilo | Fecha: Jul 31, 2010.

Gracias por la ayuda,
pero cuando intent{e hacer el arreglo con numeros aleatorios, me saca siempre el mismo valor, osea todo el arreglo tiene el mismo valor.
C{omo puedo hacer una matriz con numeros aleatorios?

Autor: virgilio | Fecha: Oct 27, 2010.

Virgilio, lo puedes hacer como en el código q puse, ya verifiqué que funciona.

Autor: Tomy | Fecha: Dic 23, 2010.

hola, bueno me llevo la idea, ojala pueda mejora mi prgrama con ella…… gracias

Autor: solmaira castillo | Fecha: Jul 12, 2011.

oye y si quiero utilizar esta funcion para mostrar videos aleatoriamente como tendria que hacerle para mostrarlos y para mandarlos llamar?

Autor: Alexia | Fecha: Oct 17, 2011.

Gracias amigo, muy bn explicado, me sirvio muchisimo.

Autor: anRoswell | Fecha: Dic 6, 2011.

Muy buen aporte muchas gracias

Autor: Manuel Gutierrez Rojas | Fecha: Ene 19, 2012.

Hola, excelente ejemplo…..Tengo una duda

Me gustaria hacer ese mismo ejemplo en consolo, pero no se como mostrar el resultado por pantalla, me ayuda?

Random r = new Random();

int[] numeros = new int[r.Next(1, 16)];

for (int i = 0; i < numeros.Length; i++)
{
numeros[i] = r.Next(1, 17);
}
Console.Write("{0}", numeros[]);//En esta linea es que tengo el inconveniente
Console.ReadKey();
}

Autor: OnlyZero | Fecha: Jul 3, 2012.

Ya tengo la solucion….¬¬ solo era cuestion de organizar bien el codigo…

Random r = new Random();

int[] numeros = new int[r.Next(1, 16)];

for (int i = 0; i < numeros.Length; i++)
{
numeros[i] = r.Next(1, 17);

Console.Write("{0}",numeros[i]);
}
Console.ReadKey();

Autor: OnlyZero | Fecha: Jul 3, 2012.

hola pss el windows form marca error y la vdd no entiendo :/

Autor: Sther | Fecha: Sep 21, 2012.

en consola sii corre pero en el otro noo

Autor: Sther | Fecha: Sep 21, 2012.

aaaaaaaaaaa una p´regunta es k me dejaron sacar numero y colores aleatorios de una base de datos k x ejemplo tenga 10 numeros alguien ,e puede decir masomenos como? xfavorsito :/

Autor: Sther | Fecha: Sep 21, 2012.

Ok pero si necesito el random para un arreglo bidimencional, utilizo el .GetLength(0), o como ya me confundi

Autor: Juan Carlos | Fecha: Oct 10, 2012.

@Juan Carlos: para un array bidimensional sería:

//Supongamos que queremos crear un array 
//bidimensional de enteros
int [,] array= new int [r.Next(0,50), r.Next(0,10];

Este código crearía un array bidimensional, donde GetLength(0) tendría como máximo tamaño 50 y GetLength(1) 10 como máximo.

Autor: Tomy | Fecha: Oct 30, 2012.

muchisimas gracias tomy

Autor: Juan Carlos | Fecha: Oct 30, 2012.

Hola muy buen ejemplo, pero como seria para que el numero generado no se repita?

Autor: Debora | Fecha: Ene 29, 2013.

@Debora, excelente pregunta! aunque si el número generado no se repite, entonces no es random, tal vez estés buscando algún algoritmo que genere números a partir de una función específica. Si sabes un poco de inglés puedes leer sobre “Linear congruential generator”. Pero si lo que buscas es algo sencillo, escribe tu propia clase para esto, no es muy complicado, debes escribir un método estático con una función que genere un número a partir de su antecesor.

Autor: Tomy | Fecha: Feb 4, 2013.

quisiera hacer lo mismo de numero aleatorios pero en lugar de usar numeros que sean imagenes aleatorias.

como puedo hacerlo..

Autor: julio calderon | Fecha: Mar 21, 2013.

Muy buena pregunta, pero no es tan complicado, podrías asignarle una ID a cada imágen usando un diccionario o hashtable y entonces hacer algo como:

    //Inicializamos la clase random
    Random r = new Random();
    //Buscamos un numero aleatorio menor que 10, 
    //que debería ser la cantidad de imagenes que tienes
    int imgId = r.Next(10);
    //Ahora busquemos la imagen con esa ID en el diccionario
    //que supuestamente creamos antes
    Image img = dictionary[imgId];

Si no te queda claro algo me dices. Saludos

Autor: Tomy | Fecha: Mar 28, 2013.

Hola, tengo un arreglo con los valores ya establecido y quiero elegir de manera aleatoria, solo 6 valores, no se como aplicar el random aquí. Podrías ayudarme?

Autor: Elizabeth | Fecha: Jun 7, 2013.

Elizabeth , simplemente tendrias que hacer una seleccion aleatoria del 0 al 6 y despues tu numero va a ser el que le corresponda al indice aleatorio

Random r = new Random();
//Buscamos un numero aleatorio menor que 6 que son tus elementos
int[] arreglo = { 10, 45, 34, 25, 67, 78 };
int indiceAleatorio = r.Next(6); //Sacar el numero aleatorio
//y asignarlo al arreglo para elegir tu numero
int numeroAleatorio = arreglo[indiceAleatorio];

Autor: Manuel Gutiérrez | Fecha: Jun 13, 2013.

Los ejemplos estan mal… si quieres un numero de 3 cifras, tu escribiste

int aleatorio3 = r.Next(100, 999);

random toma el 999 y le resta 1 por defecto porque devuelve un valor menor a 999.

Por lo tanto, si quieres un numero aleatorio de 3 cifras tienes que escribir

int aleatorio3 = r.Next(100, 1000);
y asi corrige los otros ejemplos :D

Autor: Yop | Fecha: Ago 22, 2013.

Como podria hacer para crear un formulario que tenga tres textbox y q en el primero me tire los numero aleatorios del 1-100 y en el segundo los positivos y el tercero los negativos????? como hago para mandar a llamar el random en cada textbox???

Autor: Wiliam M | Fecha: Ene 29, 2014.

disculpe me pueden a ayudar solo q tengo q hacer un proyecto de un juego …. q consiste en la hay q hacer un ramdom con letras luego hacer q esa letras caigan así como lluvia de letras y después el usuario tiene q presionar la letra antes de q caiga ….. ayudenme si porfavor

Autor: waly | Fecha: May 22, 2014.

Hola, quisiera hacerte una consulta: Soy un estudiante de desarrollo de software, y tengo un test la próxima semana, éste consta en programar el juego de la ruleta rusa en C# utilizando el comando “random”. Quisiera saber si me podrías ayudar con algunos tips para desarrollarlo.
Gracias!

Saludos desde Costa Rica!

Autor: Jesús | Fecha: Jun 26, 2014.

Escribe tu comentario

Requerido.

Requerido. No público.

Si tienes alguno.