2012-06-28 5 views
4

Я ищу метод, который отвечает случайным образом true или false на определенный процент Integer. например:Метод, который возвращает true или false в x процент

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

Я считаю, что вы просто overthinking его:

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 истинно, а остальные - false. Учитывая тот факт, что вы согласны с тем, что rand() полностью случайен, этот shoud решает вашу проблему.

Так
if (random_num >= percent)изменил
return true;
else
return false;

+0

Не уверен, что это работает: если мой процент равен 100, я хочу, чтобы он был истинным в 100% случаев, но случайное число будет только 100 раз из 100 раз. – NominSim

+0

Вы не возражаете против вашего вопроса. Данное число будет равно 100, а случайное число будет всегда равным или меньше 100 ... Это вернет true – Nidis

+0

Не было моего вопроса, но у вас есть '> =' not '<=', а случайное число от 1-100 будет только '> =' 100 один раз в сотне. – NominSim

Смежные вопросы