JAVA Math.random() [Fermé]

Signaler
-
Messages postés
16308
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 avril 2021
-
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

Messages postés
16308
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 avril 2021
2 822
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
9
Date d'inscription
mardi 24 août 2010
Statut
Membre
Dernière intervention
24 août 2010
1
voir maple :D
Messages postés
2
Date d'inscription
mardi 24 août 2010
Statut
Membre
Dernière intervention
24 août 2010

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
(Math.random()*10000)%7778