Générer un nombre aléatoire différents des nombres existants

Résolu
neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -  
neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un tableau de int de taille 10 (ces éléments sont bornés entre 1 et 10) . Dans ce tableaux il y a les valeurs 2, 5 , 7
Je veux créer un nombre entier aléatoire entre 1 et 10 mais il doit être différent des éléments qui existe déjà dans le tableau (ça veut dire que le nombre généré doit être soit 1 ou 3 ou 4 ou 6 ou 8 ou 9 ou 10) .

J'ai la formule pour créer un nombre aléatoire, il me reste une idée pour faire la condition :
int higher = 10, lower = 1;
int random = (int)(Math.random() * (higher-lower)) + lower;

Vous avez des idées ? merci

3 réponses

  1. Millaï Messages postés 171 Date d'inscription   Statut Membre Dernière intervention   26
     
    Bonjour,

    public class un {

    public static void main(String[] args)
    {
    int taille;
    int array[] = {0,2,5,7,11};
    taille = (array.length);
    int tab[] = new int[taille];
    for(int i = 0; i < taille-1; i++)
    {
    int higher = array[i+1], lower = array[i]+1;
    int random = (int)(Math.random() * (higher-lower)) + lower;
    tab[i]= random;
    }
    int nbAlea = (int)(Math.random()*taille);
    int resultat = tab[nbAlea];
    if (resultat == 0) resultat++;
    System.out.println(resultat);
    }
    }

    Normalement ça marche !
    0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Tu peux utiliser un Set en parallèle de ton tableau. Quand tu utilises la méthode add, ça renvoie true si l'ensemble a été modifié ou false si la valeur ajoutée existait déjà.

    Exemple : je rempli aléatoirement un tableau avec des valeurs différentes.

    public static void main(String...args)
    {
        int lower = 1, higher = 10;
        int[] tab = new int[5];
        
        HashSet<Integer> set = new HashSet<Integer>(tab.length);
        
        for (int i = 0; i < tab.length; i++ )
        {
            int random;
            do
            {
                random = (int) (Math.random() * (higher - lower)) + lower;
            }
            while ( !set.add(random));
            
            tab[i] = random;
        }
        
        System.out.println(Arrays.toString(tab));
    }

    Remarque : pour éviter le passage inutile vers un nombre aléatoire double pour le repasser en int avec ta formule
    (int) (Math.random() * (higher - lower)) + lower;
    on peut générer directement des entiers aléatoires avec la classe Random.

    private static final Random RANDOM = new Random();
    
    int random = RANDOM.nextInt(higher-lower) + lower;
    0
  3. neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bonjour,

    Je vous remercie pour votre aide précieux, je vous laisse ce que j'ai fait et ça marche pour moi.

    package sdfsdf;

    /**
    * @author Youness Mourtaji
    *
    */
    public class un {

    public static void main(String[] args)
    {
    String [] delivriesReferences = {"v1.1","v1.20","v1.30","v1.56","v1.123","v1.147","v1.201","v1.253"};
    String random = myVersion(1,260);
    System.out.println("random : " + random);
    }
    public static String myVersion(int lower, int higher) {
    int random = (int)(Math.random() * (higher-lower)) + lower;
    int i=0;
    String version = null;
    version = toString1(random);
    String [] delivriesReferences = {"v1.1","v1.20","v1.30","v1.56","v1.123","v1.147","v1.201","v1.253"};
    int taille = delivriesReferences.length;

    for(int j=0; j<taille; j++)
    {
    if (version==delivriesReferences[j])
    {

    int max = Integer.valueOf(delivriesReferences[j+1]).intValue();
    int min = Integer.valueOf(delivriesReferences[j]+1).intValue();
    random = (int)(Math.random() * (max-min)) + min;
    version = toString1(random);
    }
    }

    return version;
    }

    //méthode de concaténation des chaines de caractéres
    public static String toString1(int version)
    {
    final StringBuilder builder = new StringBuilder();
    builder.append("v1.").append(version);
    return builder.toString();
    }
    }
    0