JAVA Math.random()

YNWA -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
j'aimerais générer un nombre entier entre 0 inclus et 7777 inclus, mais en excluant tous les nombres qui se terminent par 8 ou 9.
Est-ce que quelqu'un a une idée?

merci

4 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Aaaargh ! Des maths ^^

    Il faut considérer un isomorphisme pour passer de l'ensemble des entiers naturels N, à l'ensemble des entiers naturels dont l'unité est inférieure ou égale à 7 (appelons le M).

    On peut par exemple appeler phi(n) le nième nombre de M.
    Exemple : phi(0)=0... phi(7)=7, phi(8)=10... phi(15)=17... phi(8k+u)=10k+u

    public static int phi(int n) 
    { 
    	return (n/8)*10+(n%8); 
    }

    Inversement on peut retrouver à partir d'une valeur n de M, l'entier k tel que phi(k)=n.
    Evidemment ici n ne peut pas finir par 8 ou 9 vu que n est le résultat de phi(k)

    public static int psi(int n) 
    { 
    	return (n/10)*8+(n%10); 
    }

    Au final chercher un nombre aléatoire entre 0 et 7777 qui ne finit ni par 8, ni par 9, c'est chercher phi(n) où n est un nombre aléatoire entre 0 et psi(7777)

    import java.util.Random; 
    
    public final static Random rand = new Random(); 
    public final static int MAX = psi(7777); // 6223 
    
    public static int aleatoire() 
    { 
    	return phi(rand.nextInt(MAX+1)); 
    }

    Cette méthode bien qu'un peu mathématiques a un certain nombre d'avantages, en particulier celui de conserver la même probabilité pour chacune des valeurs possibles.
    La confiance n'exclut pas le contrôle
    3
  2. oussama_xt Messages postés 11 Statut Membre
     
    voir maple :D
    0
  3. Jmarwen Messages postés 2 Statut Membre
     
    bonjour
    je te donne une petite idée
    Random r = new Random();
    int i;
    do
    {
    i = r.nextInt(7777);
    String temp = String.Valueof(i) ;
    }
    while( temp.endsWith("9")||temp.endsWith("8") )

    essaie ça peut etre
    0