[ java] sortir 6 numeros parmi des 18
Résolu
domxaline
-
domxaline -
domxaline -
Bonjour,
j'ai 18 numéros sorti à partir de ce prg,
maintenant je vais sortir de là 6 numéros
quelqu'un peut m'aider svp
j'ai 18 numéros sorti à partir de ce prg,
maintenant je vais sortir de là 6 numéros
quelqu'un peut m'aider svp
import java.util.Random; public class randomtirage { public static void main(String[]args) { Random dice=new Random(); int number,i; for(i=1;i<=3;i++) { for(int counter=1;counter<=6;counter++) { number=1+dice.nextInt(50); System.out.print(number+","); System.out.print(""); } } } }
A voir également:
- [ java] sortir 6 numeros parmi des 18
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
4 réponses
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
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