Générer aléatoirement un nombre d'une liste précise.
Résolu/Fermé
TheCastleGaming
-
12 mars 2015 à 18:33
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 12 mars 2015 à 21:48
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 12 mars 2015 à 21:48
A voir également:
- Générer aléatoirement un nombre d'une liste précise.
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Generer mot de passe - Télécharger - Sécurité
- Comment générer un qr code - Guide
- Liste groupe whatsapp - Guide
2 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
12 mars 2015 à 19:29
12 mars 2015 à 19:29
Bonjour,
Tu tires aléatoirement un entier (avec Random.nextInt) compris entre 0 et n (exclus) où n est la taille de ta liste, cet entier représentant la position dans la liste du nombre que tu vas affecter à ta variable.
Tu tires aléatoirement un entier (avec Random.nextInt) compris entre 0 et n (exclus) où n est la taille de ta liste, cet entier représentant la position dans la liste du nombre que tu vas affecter à ta variable.
import java.util.Arrays; import java.util.List; import java.util.Random; public class Test { public static void main(String[] args) { List<Integer> list = Arrays.asList(12,2,34,87,34,12,13,34); Random random = new Random(); int pos = random.nextInt(list.size()); int x = list.get(pos); System.out.println(x); } }
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
12 mars 2015 à 21:48
12 mars 2015 à 21:48
Pour aller plus loin : voici une manière d'obtenir le même résultat mais de manière générique avec les lambdas fonctions (en Java 8).
Le principe est strictement le même à part qu'on ne se limite plus à une liste d'entiers mais qu'on généralise à tout et n'importe quoi.
Remarque : ce n'est pas un code pour débutants.
Exemple avec un tableau, une liste et une chaîne de caractères :
Le principe est strictement le même à part qu'on ne se limite plus à une liste d'entiers mais qu'on généralise à tout et n'importe quoi.
Remarque : ce n'est pas un code pour débutants.
import java.util.Random; import java.util.function.BiFunction; import java.util.function.ToIntFunction; public class Chooser { private static final Random RANDOM = new Random(); /** * Choisit aléatoirement un élément dans un arrangement de données. * @param datas l'arrangement de données où prendre l'élément * @param sizeFunction une fonction qui permet de calculer le nombre d'éléments dans l'arrangement * @param getFunction une fonction qui permet de récupérer un élément dans l'arrangement connaissant sa position (entre 0 et taille-1) * @return l'élément choisi aléatoirement dans l'arrangement */ public static <D,R> R chooseOne(D datas, ToIntFunction<D> sizeFunction, BiFunction<D,Integer,R> getFunction) { int size = sizeFunction.applyAsInt(datas); int pos = RANDOM.nextInt(size); return getFunction.apply(datas, pos); } }
Exemple avec un tableau, une liste et une chaîne de caractères :
import java.util.Arrays; import java.util.List; public class Test { public static void main(String[] args) { Integer[] tab = {1,2,3,4,5,6,7,8,9}; int a = Chooser.chooseOne(tab, x -> x.length, (x,i) -> x[i]); System.out.println(a); List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9); int b = Chooser.chooseOne(list, x -> x.size(), (x,i) -> x.get(i)); System.out.println(b); String string = "abcdefghijklmnopqrstuvwxyz"; char c = Chooser.chooseOne(string, x -> x.length(), (x,i) -> x.charAt(i)); System.out.println(c); } }
12 mars 2015 à 19:33
--
12 mars 2015 à 19:48
Le problème est résolu!
MERCI BEAUCOUP!