Produzca un número aleatorio en un rango usando C #


267

¿Cómo hago para producir números aleatorios dentro de un rango?

Respuestas:


419

Puedes probar

Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles

Mira esto

Random Class , Random.Next Method (Int32, Int32) y Random.NextDouble Method


30
Solo para agregar una nota, si está usando NextDouble () y no desea que el límite inferior sea cero. Multiplica por la diferencia entre el límite superior y el límite inferior, luego suma la diferencia entre el límite inferior y cero. Así que para -1 a 1 double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard

2
O un generador doble simplificado en el rango de -1.0 y 1.0: Double randDoubleY = new Random (). Next (-100, 100) / 100.0D;
BoiseBaked

1
Random()usa una semilla dependiente del tiempo, pero escribir eso explícitamente es mejor para facilitar la lectura.
Evgeni Sergeev

44

Intenta debajo del código.

Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51

34

Algo como:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);

2
para lo que es DateTime.Now.Millisecond?
Hille

1
Debe poner algo para que comience ... el objeto aleatorio simplemente hace muchos cálculos matemáticos sobre el valor que le da, y lo hace de tal manera que cada llamada de Next () en el mismo objeto aleatorio resultará en un valor bastante aleatorio a la llamada anterior. Para hacer que el resultado sea más aleatorio en diferentes objetos aleatorios , comienza con un número diferente, aquí, DateTime.Now.Millisecond. Si coloca una constante, en lugar de un valor cambiante, obtendrá los mismos resultados de .Next ().
Mike M

12
Randomya está sembrado con un valor del sistema, y Millisecondes solo un número entre 0 y 999. Si este par de líneas siempre estuvieran juntas en el código, solo habría 1000 valores posibles rnd.Nextdebido a que la semilla se reinicia cada vez. Misma semilla, mismo número aleatorio. Dejaría la semilla manual fuera.
John McDonald

@JohnMcDonald, tienes razón. Solo para ser precisos, se inicializa con Environment.TickCount.
Parag Meshram

11

Utilizar:

Random r = new Random();
 int x= r.Next(10);//Max range

2
Esto no especifica un rango.
Winger Sendon

1
Simplemente haga lower_value + r.Next (10) para obtener un rango aleatorio.
Austin Salgat el

6

Para futuros lectores, si desea un número aleatorio en un rango, use el siguiente código:

public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
    return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}

C # Doble aleatorio entre min y max

Muestra de código


2
La fórmula debe ser de la siguiente manera:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Frank Sebastià


3

Aquí está la versión actualizada de la respuesta Darrelk . Se implementa utilizando métodos de extensión C # . No asigna memoria ( nuevo Random () ) cada vez que se llama a este método.

public static class RandomExtensionMethods
{
    public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
    {
        return random.NextDouble() * (maxNumber - minNumber) + minNumber;
    }
}

Uso (asegúrese de importar el espacio de nombres que contiene la clase RandomExtensionMethods):

var random = new System.Random();
double rx = random.NextDoubleRange(0.0, 1.0);
double ry = random.NextDoubleRange(0.0f, 1.0f);
double vx = random.NextDoubleRange(-0.005f, 0.005f);
double vy = random.NextDoubleRange(-0.005f, 0.005f);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.