Damit geht’s:
/**
* Danke an Flown und Spacerat.
* @param n
* @param min
* @param max
* @param random
* @return
*/
private static int[] m3(int n, int min, int max, Random random) {
int[] array = new int[n];
int max2 = max;
int sum = 0;
for (int i = 0; i < n; i++) {
int r = random.nextInt(max2 - min + 1) + min;
/*if (r < min) {
r = min;
}
if (r > max2) {
r = max2;
}*/
sum += r;
max2 = r;
array** = r;
}
for (int i = 0; i < n; i++) {
array** = (int) (100d / sum * array**);
}
return array;
}
[34, 14, 12, 12, 12, 12]
sum = 96
[26, 16, 16, 15, 13, 12]
sum = 98
[29, 19, 12, 12, 12, 12]
sum = 96
[20, 20, 15, 15, 14, 13]
sum = 97
[20, 20, 19, 14, 12, 11]
sum = 96
[30, 23, 11, 11, 11, 11]
sum = 97
[23, 15, 15, 15, 15, 15]
sum = 98
[24, 22, 18, 12, 11, 9]
sum = 96
[21, 18, 17, 16, 13, 12]
sum = 97
[22, 21, 16, 16, 11, 11]
sum = 97
Das sieht realistisch aus. Je nachdem, wie n, min, und max gewählt werden, kann Partei A auch > max, oder Partei F < min.
Fällt jetzt noch etwas auf? „Oft“ gibt es bei 6 Parteien 4-mal gleiche.