1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class Exemple {
public static void main(String[] args) {
int[] values = createRandomValues(20, 100, 100);
System.out.println(Arrays.toString(values));
System.out.println("Somme : " + Arrays.stream(values).sum());
}
private static int[] createRandomValues(final int nb, final int max, int targetSum) {
if ( max*nb<targetSum ) {
throw new IllegalArgumentException();
}
final Random random = new Random();
final int[] randomValues = new int[nb];
int sum=0;
for(int i=0; i<nb; i++) {
sum += (randomValues[i] = random.nextInt(max));
}
final double r = sum/(targetSum*1d);
sum=0;
for(int i=0; i<nb; i++) {
final int value=randomValues[i];
sum += (randomValues[i] = (int)(randomValues[i]/r) );
}
final int fix = targetSum - sum;
// randomValues[random.nextInt(nb)] += fix; // correction due aux arrondis sur une seule des valeurs
for(int i=0; i<fix; i++) {
randomValues[random.nextInt(nb)]++; // répartition de l'erreur sur diverses valeurs
}
return randomValues;
}
} |
Partager