Necesito algunas líneas de código Java que ejecutan un comando x porcentaje del tiempo al azar.Java: hacer algo x por ciento de las veces
psuedocode:
boolean x = true 10% of cases.
if(x){
System.out.println("you got lucky");
}
Necesito algunas líneas de código Java que ejecutan un comando x porcentaje del tiempo al azar.Java: hacer algo x por ciento de las veces
psuedocode:
boolean x = true 10% of cases.
if(x){
System.out.println("you got lucky");
}
Si por tiempo quiere decir veces que el código se ejecuta, de manera que usted quiere algo, dentro de un bloque de código, que es ejecutado el 10% de las veces que se ejecuta todo el bloque sólo se puede hacer algo como:
Random r = new Random();
...
void yourFunction()
{
float chance = r.nextFloat();
if (chance <= 0.10f)
doSomethingLucky();
}
Por supuesto 0.10f
significa 10% pero puedes ajustarlo. Como todos los algoritmos de PRNG, esto funciona según el uso promedio. No se acercará al 10% a menos que se llame yourFunction()
una cantidad razonable de veces.
Sólo se necesita algo como esto:
Random rand = new Random();
if (rand.nextInt(10) == 0) {
System.out.println("you got lucky");
}
Aquí está un ejemplo completo que mide es:
import java.util.Random;
public class Rand10 {
public static void main(String[] args) {
Random rand = new Random();
int lucky = 0;
for (int i = 0; i < 1000000; i++) {
if (rand.nextInt(10) == 0) {
lucky++;
}
}
System.out.println(lucky); // you'll get a number close to 100000
}
}
Si quieres algo así como el 34% se podría usar rand.nextInt(100) < 34
.
Usted tiene que definir el "tiempo" en primer lugar, desde el 10% es una medida relativa ...
P. ej x es verdadero cada 5 segundos.
O puede usar un generador de números aleatorios que muestree uniformemente del 1 al 10 y siempre haga algo si muestra un "1".
Siempre se puede generar un número aleatorio (por defecto es entre 0 y 1, creo) y comprobar si es < = 0,1, de nuevo esto no es uniformemente aleatoria ....
Puede usar Random. Es posible que desee sembrarlo, pero el valor predeterminado suele ser suficiente.
Random random = new Random();
int nextInt = random.nextInt(10);
if (nextInt == 0) {
// happens 10% of the time...
}
public static boolean getRandPercent(int percent) {
Random rand = new Random();
return rand.nextInt(100) <= percent;
}
Usted podría intentar esto:
public class MakeItXPercentOfTimes{
public boolean returnBoolean(int x){
if((int)(Math.random()*101) <= x){
return true; //Returns true x percent of times.
}
}
public static void main(String[]pps){
boolean x = returnBoolean(10); //Ten percent of times returns true.
if(x){
System.out.println("You got lucky");
}
}
}
¿'' 'incluso funciona ?! – michaelb958
No, fue un error. –
Esto es problemático, nunca debes enviar el resultado de una llamada a '.random()' a un 'int', ya que introducirás sesgos no aleatorios. En su lugar, use los métodos apropiados de 'Random', como' .nextInt() 'que maneja esos sesgos correctamente. – dimo414
para tomar su código como una base, simplemente podría hacerlo así:
if(Math.random() < 0.1){
System.out.println("you got lucky");
}
FYI Math.random()
utiliza un estático instancia de Random
Porque ' nextFloat() 'puede dar como resultado cero, la comparación debe ser estrictamente menor que. En otras palabras, use '<' en lugar de '<='. Por supuesto, sería mucho más fácil razonar correctamente sobre el código si usa 'nextInt (10)' en lugar de 'float'. – erickson
Eso es incorrecto. Es solo una suposición errónea, las carrozas no son números exactos, por lo que usar una comparación estricta en esta situación no cambiará nada, también porque la secuencia aleatoria se genera a partir de valores int. Te reto a que proporciones un fragmento que muestre que el uso de
Jack
Pruébalo tú mismo: http://www.pastie.org/1744784 – Jack