JAVA Math.random()

Fermé
YNWA - 10 août 2010 à 10:09
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 28 juil. 2011 à 20:57
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


A voir également:

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 28/07/2011 à 22:01
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
oussama_xt Messages postés 9 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 24 août 2010
24 août 2010 à 10:28
voir maple :D
0
Jmarwen Messages postés 2 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 24 août 2010
24 août 2010 à 12:31
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
(Math.random()*10000)%7778
-1