JAVA Math.random()

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. Modérateur
    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
    1. 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