gentoo linux, java, software libre y otras hierbas
Jul, 24 2008 - 1:02 pm

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:

pantallazo numero aleatorio

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

Los ejercicios utilizados en este post fueron desarrollados con las librerías Gtk# usando Mono. Se añadió además un link de descarga de un ejercicio similar, tomado del libro C# How to Program de Deitel, que utiliza Windows Forms, desarrollado para trabajar sobre Visual Studio de Microsoft en plataformas Windows y se encuentra en inglés.

11 Comentarios | deja el tuyo

Un enlace entrante

10 Comentarios en “Números aleatorios en C#”

  1. Obelich dice:

    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

  2. german dice:

    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.

  3. Cristian dice:

    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.

  4. german dice:

    gracias por la ayuda, ya lo habia contemplado pero no lo había hecho, estamos en contacto.

  5. den dice:

    hola soy denis estos interasedo en toda la informacion de c#, especialmente del juego de dado del 1 al 7 gracias

  6. Vctr dice:

    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?)”

  7. Edgar dice:

    Hola, muy buen ejemplo de la clase Random. Vctr, debes poner en el principio de tu codigo la sentencia:
    using System;

    Saludos.

  8. SRK dice:

    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?

  9. SRK dice:

    OK problema solucionado, nunca intenten crear el objeto Random dentro del ciclo, porque pasara eso XD…

  10. eliana dice:

    hola, quisiera elaborar un programa en lenguaje c++ que genere 2 numeros entre 6 que simulen los lanzamientos de dos datos, si la suma de ellos es 7 mostrar mensaje gano caso contrario perdio. adicionalmente muestre los numeros obtenidos

¡Déjanos tu comentario!