Генерация целых чисел с шансом
Я задался вопросом: как сделать рандомайзер целых чисел, но с шансом. То есть есть диапазон от 0 до 100 и цифры целые. Но хотелось бы сделать так, что бы шанс выпадения какого-то числа был 20%
Ответ:
Вообразим массив (Отсортированный), где: number - числа, а chance - их количество в массиве
import java.util.Random;
import java.util.stream.IntStream;
public class Test {
public static void main(String[] a) {
int[] number = new int[] {0, 1, 23, 456, 7890, 12345}; // Числа
int[] chance = new int[] {0, 50, 1, 1, 1, 10 }; // Количество
int count = IntStream.of(chance).sum(); // Считаем количество элементов воображаемого массива
// Вывод вероятностей:
for (int i = 0; i < chance.length; i++) {
System.out.println("Вероятность числа \"" + number[i] + "\": \t" + (chance[i]*100d/count) + "%");
}
// Генерация случайного числа
Random random = new Random();
for (int randomNumsCount = 0; randomNumsCount < 10; randomNumsCount++) {
int index = random.nextInt(count); // Выбираем случайный индекс из воображаемого массива
for (int i = 0; i < chance.length; i++) { // Ищем элемент, которому принадлежит этот индекс
index -= chance[i];
if(index < 0) {
System.out.println("Случайное число: " + number[i]);
break;
}
}
}
}
}
Примеры массивов:
Число 10 - 50%
Число 100 - 50%
int[] number = new int[] {10, 100};
int[] chance = new int[] {50, 50}; // или new int[] {1, 1} или new int[] {25, 25}
Воображаемый массив: {10, 25}
Число 15 - 20%
Число 20 - 30%
Число 25 - 50%
int[] number = new int[] {15, 20, 25};
int[] chance = new int[] {2, 3, 5}; // или new int[] {20, 30, 50} ...