2012-06-28 42 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