[ java] sortir 6 numeros parmi des 18

Résolu/Fermé
domxaline - 11 août 2012 à 15:33
 domxaline - 12 août 2012 à 12:11
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

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:

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
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 !

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);	
	}
}
0
merci beaucoup
0
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
0
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
Tu peux utiliser le même principe : supprimer les valeurs possibles au fur et à mesure que tu les tires.

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
0
merci beaucoup
votre aides a été très utile
0