variable una sumar que leer ejemplo comparar como booleanos booleana java random probability

una - variable booleana java ejemplo



Aleatorio booleano con peso o sesgo. (8)

Necesito generar algunos booleanos al azar. Sin embargo, tengo que ser capaz de especificar la probabilidad de devolver true . Como resultado haciendo:

private Random random = new Random(); random.nextBoolean();

no trabajará.

Una posible solución sería:

private Random random = new Random() public boolean getRandomBoolean(float p){ return random.nextFloat() < p; }

Me preguntaba si hay una forma mejor o más natural de hacer esto.

EDITAR: supongo que estoy preguntando si hay una clase de biblioteca que proporciona un método nextBoolean (probabilidad flotante).


Me preguntaba si hay una forma mejor o más natural de hacer esto.

El enfoque que estás usando ya está bien. * AFAIK, no hay un método estándar de Java que haga que este código sea más corto.

* Para fines no criptográficos.


Ampliando la respuesta del usuario 2495765, puedes hacer una función que tome una relación de entrada (como dos valores de probabilidad: rango ver código)

public class MyRandomFuncs { public Random rand = new Random(); boolean getBooleanAsRatio(int chance, int range) { int c = rand.nextInt(range + 1); return c > chance; }

}

Dependiendo de lo que pretenda hacer, es probable que no desee inicializar Random desde su método, sino que utilice una variable de clase (como en el código anterior) y llame a nextInt () desde su función.


El objeto aleatorio ya debe ser inicializado.

public static boolean flipRandom(double probability) { Validate.isBetween(probability, 0, 1, true); if(probability == 0) return false; if(probability == 1) return true; if(probability == 0.5) return random.nextBoolean(); return random.nextDouble() < probability ? true : false; }


Esto es lo que estoy usando. Muy similar a la respuesta de FracturedRetina.

Random random = new Random(); // 20% chance boolean true20 = (random.nextInt(5) == 0) ? true : false; // 25% chance boolean true25 = (random.nextInt(4) == 0) ? true : false; // 40% chance boolean true40 = (random.nextInt(5) < 2) ? true : false;


La biblioteca MockNeat implementa esta característica.

Ejemplo para generar un valor booleano que tiene el 99,99% de ser verdadero:

MockNeat m = MockNeat.threadLocal(); boolean almostAlwaysTrue = m.bools().probability(99.99).val();


Tu forma es probablemente mejor, codifica el código de golf, pero otra forma de hacerlo es así:

public boolean getRandomBoolean() { Random random = new Random(); //For 1 in 5 int chanceOfTrue = 5; if (random.nextInt(chanceOfTrue) == 0) { return true; } else { return false; } }

O para 2 en 5, prueba esto:

public boolean getRandomBoolean() { Random random = new Random(); //For 2 in 5 int chanceOfTrue = 5; int randInt = random.nextInt(chanceOfTrue); if (randInt == 0 || randInt == 1) { return true; } else { return false; } }


public boolean getBiasedRandom(int bias) { int c; Random t = new Random(); // random integers in [0, 100] c=t.nextInt(100); if (c>bias){return false; } else{return true;} }

Este se basa en porcentaje ...