El siguiente algoritmo genera números aleatorios no uniformes. La premisa es dar un porcentaje de probabilidad para que aparezca cierto número en un rango dado.
Ejemplo:
Generar un número aleatorio del 1 al 350 del cual el número 56 tenga un 34.9% de probabilidad de que salga elegido. Las entradas serían las siguientes:
rango = 350
numero = 56
ratio = 0.349
Código Java 1 (AleatorioCondicionado1.java)
package aleatoriocondicionado1;
public class AleatorioCondicionado1 {
public static void main(String[] args) {
RandA randa = new RandA();
int max = 350;
int num = 56;
float ratio = 0.349F;
int valor = randa.getRandA(max, num, ratio);
System.out.println("Rango: [1:" + max + "]");
System.out.println("Numero: " + num);
System.out.println("Ratio%: " + ratio);
System.out.println("Valor obtenido: " + valor);
}
}
Código Java 2 (RandA.java):
package aleatoriocondicionado1;
import java.util.Random;
public class RandA {
Random r = new Random();
int getRandA(int max, int num, float ratio) {
float x;
int rand = r.nextInt(max) + 1;
x = max * ratio;
if (rand <= x) {
return num;
} else {
do {
rand = r.nextInt(max) + 1;
} while (rand == num);
return rand;
}
}
}
Resultado:
run:
Rango: [1:350]
Numero: 56
Ratio%: 0.349
Valor obtenido: 56
BUILD SUCCESSFUL (total time: 1 second)
Nota: Si ejecutamos muchas veces el mismo código se comprueba de que el número 56 tiende a salir en una proporción mayor al resto de números, concretamente saldría en un 34.9 % de los casos.
Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.
Suscribirse a:
Enviar comentarios (Atom)
Con la tecnología de Blogger.
No hay comentarios:
Publicar un comentario