Имейте в виду, что со стандартными RNG (генераторами случайных чисел) вы получите очень равномерное распределение значений.Получив достаточно «случайных» значений, вы получите средние результаты, как вы обнаружили.Что касается населения вашей базы данных, я бы рассмотрел этот подход:
Выберите случайное число, которое будет выступать в качестве среднего балла за фильм.Затем сгенерируйте набор случайных чисел в верхней границе этого среднего.Например, если вы случайным образом генерируете 7, генерируйте случайные числа от 5 до 9. Затем добавьте пару значений от 1 до 6 и от 8 до 10, чтобы создать видимость выбросов.
РЕДАКТИРОВАТЬ:
Этот ответ может быть тем, что вы ищете, с кодом на Java.
Пример четного распределения:
Ваш код, вероятно, похож наследующее:
public class EvenDistribution
{
private static Random random = new Random();
public static void main(String[] args)
{
int maxValue = 20;
int[] distribution = new int[maxValue];
int iterations = 1000;
for (int i = 0; i < iterations; i++)
{
int rand = random.nextInt(maxValue);
distribution[rand]++;
}
for (int i = 0; i < distribution.length; i++)
{
System.out.println(i+1+": "+distribution[i]);
}
}
}
Этот класс имел следующий вывод:
1: 47
2: 45
3: 59
4: 52
5: 54
6: 52
7: 49
8: 49
9: 49
10: 48
11: 40
12: 43
13: 42
14: 61
15: 43
16: 55
17: 47
18: 55
19: 64
20: 46
Распределение очень равномерное.19 выглядит немного ненормально, но в целом можно сказать, что этот метод ГСЧ дает предсказуемые результаты.
Используя библиотеку Math Uncommons, упомянутую выше, я использовал аналогичный код, используя GaussianGenerator
.
public class RandomDistribution {
private static MersenneTwisterRNG random = new MersenneTwisterRNG();
private static GaussianGenerator gen = new GaussianGenerator(7, 3, random);
public static void main(String[] args)
{
int maxValue = 20;
int[] distribution = new int[maxValue];
int iterations = 1000;
for (int i = 0; i < iterations; i++)
{
int rand = Math.abs(gen.nextValue().intValue());
distribution[rand]++;
}
for (int i = 0; i < distribution.length; i++)
{
System.out.println(i+1+": "+distribution[i]);
}
}
}
Было получено следующее:
1: 19
2: 27
3: 41
4: 68
5: 110
6: 111
7: 125
8: 138
9: 125
10: 85
11: 64
12: 32
13: 32
14: 14
15: 5
16: 2
17: 1
18: 0
19: 1
20: 0
Кажется, что эта библиотека будет оченьхорошо для того, что вы пытаетесь достичь.