
Envoyé par
Saly bélla
C'est la formule générale de nexInt (r.nextInt((max-min)+1)+min.
A noter qu'on peut faire aussi :
1 2 3 4 5
|
ThreadLocalRandom random = ThreadLocalRandom.current();
int i = random.nextInt(0, ListG.size());
int j = random.nextInt(2, ListG.get(i).size());
gene = ListG.get(i).get(j); |
pour éviter ces formules.
(A noter également que la deuxième position, dans une List en Java, c'est 1, pas 2).

Envoyé par
Saly bélla
J'ai un autre souci maintenant

. Je veux choisir aléatoirement un nombre de la liste "ListK" et l'ajouter dans chaque ListP mais sans répétition. Il est different dans chaque liste.
Un nombre de la liste ListK ? Un nombre aléatoire donc je suppose ? Donc int nListK = ListK.get(random.nextInt(0,ListK.size()), un truc comme ça. A noter que comme ça fait déjà trois fois qu'on prend un nombre aléatoirement dans une List, une (des) petite(s) méthode(s) ne ferait(feraient) pas de mal, genre :
1 2 3 4 5 6 7 8 9
| public int nombreAleatoire(List<Integer> list) {
return list.get(ThreadLocalRandom.current().nextInt(0,list.size()));
}
public int nombreAleatoir(List<Integer> list, int debut, int fin) {
return nombreAleatoire(list.sublist(debut,fin));
}
public int nombreAleatoir(List<Integer> list, int debut) {
return nombreAleatoire(list, debut, list.size());
} |
l'ajouter dans chaque ListP, on peut faire
ListG.forEach(list->list.add(nListK));
Ou un forEach.
Mais sans répétition, ça veut dire quoi exactement ? Sans doublon, peut-être, c'est-à-dire que si le nombre est déjà dans une "ListP", on l'ajoute pas : si oui, il suffit de tester s'il ne s'y trouve pas déjà, avec contains(), par exemple : :
ListG.stream().filter(list->!list.contains(nListK)).forEach(list->list.add(nListK));
Ou un forEach + un if.
Il est différent dans chaque liste ? Dans ce cas, au lieu d'en tirer un et de boucler, pour l'ajouter à chaque ListP, boucler, et pour chaque ListP, en tirer un, faire le test, et l'ajouter. S'il faut en ajouter un qui n'est pas déjà présent, tirer un nombre tant qu'il s'y trouve (do/while). Une autre solution serait de copier la liste, de la mélanger (avec Collections.shuffle()), puis d'itérer (Iterator) sur les éléments jusqu'à ce qu'on en trouve un qui n'est pas déjà dans la liste de destination.
Partager