2012-06-28 39 views
4

我正在寻找一种方法,该方法根据给定的百分比整数随机地回答true或false。例如:在x百分比处返回true或false的方法

percent(100); //Will always 100% return true 
percent(50); //Will return 50% true, or 50% false 
percent(0); //Will always 100% return false, etc.. 

这里是我想出了,但由于某种原因它不工作,因为它应该是:

public static boolean percent(int percentage) 
{ 
    Random rand = new Random(); 
    return ((rand.nextInt((100-percentage)+1))+percentage)>=percentage; 
} 

我需要一个非常准确和真实的方法,请帮助它太复杂它让我头疼

+0

现在你正在减去'百分比',然后加'百分比',所以表达式减少到'rand.nextInt(101)'就是你想要的吗? – pennetti

+1

“出于某种原因,它不能正常工作。” *如何*它不起作用?你的期望是什么,结果如何?你有没有穿过并观看它?只是在这里倾销代码并说“它不工作”很少有帮助。回答上述一些问题确实可以帮助您在很多情况下自己解决问题。 –

回答

12

我相信你只是它得太多:

return (rand.nextInt(100) < percentage); 

应该正常工作。

+0

谢谢!这很简单 – Reacen

6

我会打破它成小块明白:

public boolean rollDie(int percentGiven) 
{ 
    Random rand = new Random(); 
    int roll = rand.nextInt(100); 
    if(roll < percentGiven) 
    return true; 
    else 
    return false; 
} 

通常,命名约定和跨越多行代码(而不是将许多方法调用堆叠在一行中)可以使问题更容易解决。在这里,我使用明确的名称,使其易于阅读。对于像我这样的初学者来说,这不会很好地解释非常紧凑的代码。

+0

非常感谢! – Reacen

+0

'return rand.nextInt(100)

+0

对,这个问题已经有了这个问题的答案。 – BlackVegetable

4
public boolean percent(int p){ 
    Random r=new Random(); 
    return r.nextInt(100)<p; 
} 
+0

非常感谢您的帮助,我非常感谢 – Reacen

0

如果你在1-100之间选择一个随机数,应该很容易。 例如 55对于百分比(50)的情况,如果您假设1-50之间的数字为真而其余为假,则这将是错误的。鉴于你接受rand()是完全随机的这一事实,这个问题可以解决你的问题。

所以
if (random_num >= percent)改变
return true;
else
return false;

+0

不确定这是否有效:如果我的百分比是100,我希望它在100%的时间内是真实的,但随机数只有100次100次。 – NominSim

+0

你不介意根据你的问题。给定的数字是100,随机数将始终等于或小于100 ...这将返回true – Nidis

+0

是不是我的问题,但你有'> ='不'<=',和一个随机数从一百到一百只将是'> ='100一百次。 – NominSim