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 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 12 mars 2015 à 21:48
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 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
- Annuaire inversé gratuit liste rouge - Forum Internet / Réseaux sociaux
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
- Générer nombre aléatoire excel sans doublon ✓ - Forum Excel
- Le fichier contient le nombre de voyageurs dans 3 gares. dans la cellule b5, saisissez une formule qui calcule le total et se met à jour si on change une valeur du tableau. quel total obtenez-vous ? quelle formule avez-vous saisie ? ✓ - Forum Excel
2 réponses
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
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
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
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!