[ java] sortir 6 numeros parmi des 18
Résolu/Fermé
A voir également:
- [ java] sortir 6 numeros parmi des 18
- Whatsapp 2 numéros - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Geekom as 6 - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
4 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
11 août 2012 à 16:21
11 août 2012 à 16:21
Je ne comprends pas pourquoi tu as besoin de deux boucles pour obtenir tes 18 nombres aléatoires, une seule suffit. De plus, System.out.print(""); ne sert à rien !
Après, si j'ai bien compris ce que tu voulais faire avec tes "6 parmi les 18", tu devrais stocker les résultats au fur et à mesure que tu les génères dans une Collection, puis en tirant aléatoirement un indice de celle-ci, récupérer une de ses valeurs.
import java.util.Random; public class randomtirage { public static void main(String[] args) { Random dice=new Random(); for(int counter=0; counter<18; counter++) { int number=1+dice.nextInt(50); System.out.print(number+","); } } }
Après, si j'ai bien compris ce que tu voulais faire avec tes "6 parmi les 18", tu devrais stocker les résultats au fur et à mesure que tu les génères dans une Collection, puis en tirant aléatoirement un indice de celle-ci, récupérer une de ses valeurs.
import java.util.ArrayList; import java.util.Random; public class RandomTirage { public static void main(String...args) { Random rand=new Random(); ArrayList<Integer> list1 = new ArrayList<Integer>(18); for (int i=0; i<18; i++) { int number=1+rand.nextInt(50); list1.add(number); } System.out.println(list1); ArrayList<Integer> list2 = new ArrayList<Integer>(6); for (int i=0; i<6; i++) { int n = rand.nextInt(list1.size()); int number = list1.remove(n); list2.add(number); } System.out.println(list2); } }
merci pour vos aides,je ai besoin encore un aide
je veux qu'il s'affiche pas le même numéros 2 fois
par exemple
15.45.23.45.4
ici il s'affiche 2 fois 45
mais je veux ainsi que 15.45.23.18.4
je veux qu'il s'affiche pas le même numéros 2 fois
par exemple
15.45.23.45.4
ici il s'affiche 2 fois 45
mais je veux ainsi que 15.45.23.18.4
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
Modifié par KX le 12/08/2012 à 11:41
Modifié par KX le 12/08/2012 à 11:41
Tu peux utiliser le même principe : supprimer les valeurs possibles au fur et à mesure que tu les tires.
Le principal inconvénient est de devoir au préalable générer une liste de toutes les valeurs possibles, ce qui peut être très coûteux, pour au final pas grand chose.
Une solution alternative consiste à stocker les valeurs dans une Collection qui n'accepte pas les doublons (un Set par exemple).
L'inconvénient de cette solution, c'est que le nombre d'itération de la boucle while dépend du nombre de doublons générés, et que celui-ci va fortement augmenter si tu augmentes le nombre de valeurs entre 1 et 50 que tu cherches. À partir d'un certain seuil, la première solution devient moins coûteuse.
Quelques exemples :
ArrayList<Integer> list0 = new ArrayList<Integer>(50); for(int i=1; i<=50; i++) list0.add(i); System.out.println(list0); ArrayList<Integer> list1 = new ArrayList<Integer>(18); for(int i=0; i<18; i++) { int n = rand.nextInt(list0.size()); int number = list0.remove(n); list1.add(number); } System.out.println(list1); ArrayList<Integer> list2 = new ArrayList<Integer>(6); for (int i=0; i<6; i++) { int n = rand.nextInt(list1.size()); int number = list1.remove(n); list2.add(number); } System.out.println(list2);
Le principal inconvénient est de devoir au préalable générer une liste de toutes les valeurs possibles, ce qui peut être très coûteux, pour au final pas grand chose.
Une solution alternative consiste à stocker les valeurs dans une Collection qui n'accepte pas les doublons (un Set par exemple).
Random rand=new Random(); TreeSet<Integer> set = new TreeSet<Integer>(); while (set.size()<18) { int number = rand.nextInt(50)+1; set.add(number); } ArrayList<Integer> list1 = new ArrayList<Integer>(set); System.out.println(list1); ArrayList<Integer> list2 = new ArrayList<Integer>(6); for (int i=0; i<6; i++) { int n = rand.nextInt(list1.size()); int number = list1.remove(n); list2.add(number); } System.out.println(list2);
L'inconvénient de cette solution, c'est que le nombre d'itération de la boucle while dépend du nombre de doublons générés, et que celui-ci va fortement augmenter si tu augmentes le nombre de valeurs entre 1 et 50 que tu cherches. À partir d'un certain seuil, la première solution devient moins coûteuse.
Quelques exemples :
18 parmi 50 4 doublons en moyenne 28 parmi 50 12 doublons en moyenne 38 parmi 50 32 doublons en moyenne 48 parmi 50 102 doublons en moyenne 99 parmi 100 320 doublons en moyenne 999 parmi 1000 5480 doublons en moyenne