Les Allergies
Alimentaires
Posez votre question Signaler

JAVA Math.random()

YNWA - Dernière réponse le 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
Lire la suite 

JAVA Math.random() »

4 réponses
Réponse
+3
moins plus
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.
Ajouter un commentaire
Réponse
-1
moins plus
(Math.random()*10000)%7778
Ajouter un commentaire
Ce document intitulé « JAVA Math.random() » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?