JAVA Math.random()
YNWA
-
KX Messages postés 19031 Statut Modérateur -
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
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
-
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 -
-
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 -