2013-12-17 3 views
0

В настоящее время я пытаюсь отредактировать следующий код в java со статическими числами, чтобы показать число в диапазоне (этот код показывает расстояние от определенной точки в блоках, и мне нужно сделать трудно найти блок):Несколько взвешенных случайных чисел в диапазоне

int R = getBlockTypeDistance(event.getClickedBlock().getLocation(), stid); 
if (R == -1){ 
    player.sendMessage(ChatColor.BLUE + plugin.getConfig().getString("text.very_cold")); 
} else if(R < 12) { 
    player.sendMessage(ChatColor.RED + plugin.getConfig().getString("text.very_hot")); 
} else if(R < 18){ 
    player.sendMessage(ChatColor.RED + plugin.getConfig().getString("text.hot")); 
} else if(R < 27){ 
    player.sendMessage(ChatColor.GOLD + plugin.getConfig().getString("text.warm")); 
} 

Ищу случайное число для каждого еще, если заявления со следующими диапазонами:

Вместо R < 12, диапазон от 0 до 15

Вместо R < 18, диапазон от 15 до 22

Вместо R < 27, диапазон между 22 и 30

Все диапазоны должны иметь «вес» (90% шанс получить несколько выше, чем 75% в диапазон)

Любая помощь приветствуется, спасибо.

+0

Возможный дубликат: http://stackoverflow.com/q/363681/2081889 –

+0

Он пытается весить диапазоны, увеличивая вероятность появления более высоких номеров. Определенно, не то же самое. –

ответ

0

Для невесомых случаев вы можете пойти random.nextInt(max-min+1) + min; И определенно проверить мою математику на одну ошибку!

Что вы подразумеваете под весом?

Оказывается, что 0,9^13 очень близко к 0,25 (если моя математика верна - пожалуйста, дважды проверьте!). Поэтому, если вы выбрали случайный диапазон в диапазоне 0-1,0, поднятый до 13-й степени, вы получите цифры менее 0,25 90% времени. Бросьте 1-x, чтобы сделать его более 0,75 90% времени.

+0

Он не указывает, что он имеет в виду, взвешивая, что в моем сознании делает вопрос чрезмерно неоднозначным и неопровержимым (до улучшения). –

+0

Я имею в виду, что более высокие цифры появляются больше, так как это вещь расстояния, я бы не хотел, чтобы она показывала 0-5 часто, например, я не могу иметь диапазон 5-15, потому что должно быть что-то для 0 -5 – mobile

+1

Это просто базовая вероятность @mobile. Есть много способов сделать это, но вам также нужно рассказать нам, сколько вы хотите его весить. Быть немного более конкретным –

0

Вот один из способов, я мог бы подумать об этом. Следите за комментариями, чтобы увидеть, если кто-то есть идея получше или улучшения, но это то, что я придумал:

private static int generateNumber(int min, int max) 
    { 
     Random rnd = new Random(); 
     int randomInt; 

     int weightedMin = (int)Math.round((max - min) * .75) + min; //Create a minimum number that is 75% of the way through the range 

     //Generate a random number between 1 - 100 
     //If that number is between 0 and 90 then generate the top end 
     if ((rnd.nextInt(101) + 1) <= 90) randomInt = rnd.nextInt((max - weightedMin) + 1) + weightedMin; 
     else randomInt = rnd.nextInt((max - min) + 1) + min; 

     return randomInt; 
    } 

В основном то, что она делает это генерирует случайное число в диапазоне от 1 - 100. Если это число находится в диапазоне от 1 и 90 включительно это означает, что он находился в диапазоне вероятности 90%, генерирует диапазон 75% +. В противном случае он генерирует 75% -. Имеет ли это смысл?

+0

Сколько лет я могу отредактировать свой ответ? : P lol –

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