es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo generar una secuencia de números aleatorios en rangos dados?

Estoy tratando de generar una lista de 10 números aleatorios.
Tengo algunos rangos como:

0) 0 a 9
1) 10 a 99
2) 100 a 999
3) 1000 a 9999
4) 10000 a 99999
5) 100000 a 999999.

Si genero un número aleatorio en un rango (min, max) donde min = 0 y max = 999999 con este código

import 'dart:math';
final _random = new Random();

int next(int min, int max) => min + _random.nextInt(max - min);

es más probable que se genere un número entre 100000 y 999999 que un número entre 0 y 9. Esto se debe a que hay más números en el rango (100000, 999999) que en el rango (0,9). Si elijo un número aleatorio de 0 a 999999, es más probable que sea un número en el rango 5).

Me gustaría generar 10 números aleatorios en los rangos dados con igual probabilidad para cada rango.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para generar 10 números aleatorios en los rangos dados con igual probabilidad para cada rango, necesitamos crear una lista de números donde cada número corresponda a uno de los rangos. Luego, podemos generar un número aleatorio para elegir un rango y luego generar un número aleatorio dentro de ese rango. Aquí tienes un ejemplo de código:

    import 'dart:math';
    
    final _random = Random();
    
    List<int> ranges = [10, 90, 900, 9000, 90000, 900000];
    
    List<int> randomNumbers = [];
    
    for (int i = 0; i < 10; i++) {
      int rangeIndex = _random.nextInt(6); // elegir un índice de rango aleatorio
      int minValue = rangeIndex == 0 ? 0 : ranges[rangeIndex - 1] + 1; // calcular el valor mínimo del rango
      int maxValue = ranges[rangeIndex]; // obtener el valor máximo del rango
      int randomNumber = next(minValue, maxValue); // generar un número aleatorio dentro del rango
      randomNumbers.add(randomNumber); // agregar el número aleatorio a la lista
    }
    
    print(randomNumbers);
    
    int next(int min, int max) => min + _random.nextInt(max - min);
    

    En este código, primero definimos una lista de números donde cada número corresponde al límite superior de un rango. Luego, iteramos 10 veces para generar 10 números aleatorios. En cada iteración, primero elegimos un índice de rango aleatorio usando _random.nextInt(6) (ya que hay 6 rangos). Luego, calculamos el valor mínimo del rango y el valor máximo del rango usando la lista ranges. Luego, generamos un número aleatorio dentro del rango usando la función next. Finalmente, agregamos el número aleatorio a la lista randomNumbers. Ten en cuenta que usamos un operador ternario para el caso especial cuando el rango es (0, 9) y necesitamos establecer el valor mínimo en 0.

    La salida de ejecutar este código sería una lista de 10 números aleatorios con igual probabilidad para cada rango.

Comments are closed.