[ java] sortir 6 numeros parmi des 18

Résolu
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

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("");
	  }
	 
	 }
   }
}


4 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  2. domxaline
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  3. domxaline
     
    merci beaucoup
    votre aides a été très utile
    0