Implementation de random personnalisé

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 074 fois - Téléchargée 17 fois

Contenu du snippet

cette classe est une implementation de Random personnalisé trés sympa a vous de le développez et le personnaliser selon vos besoins

Source / Exemple :


/** implementation de random personnalisé */
function Random(scale){
  this.scale=scale;
}
Random.prototype = {
        nextInt: function(){
		return Math.round(Math.random()*this.scale);
	},
	nextInt: function(scale,limit){
		var n=Math.round(Math.random()*scale);
		if(n>=limit) {
		   return this.nextInt(scale,limit);
		}
		else{return n;} 	
	},
	nextFloat: function(){
		return Math.random()* this.scale;
	},
	nextBoolean: function(){
		return (this.nextInt(10,10)>=5)?true:false;	
	},
	nextLetter: function(f){
		var str_chars = 'abcdefghijklmnopqrstuvwxyz';
		var n=this.nextInt(100,26);
		return (f)? str_chars.substr(n,1).toUpperCase():str_chars.substr(n,1);	
	}
} 
/** utilisation */
s1=new Random(100);
for(i=0;i<10;i++){
	document.write("<BR>Random "+i+" : "+s1.nextInt());
}

s2=new Random(100);
for(i=0;i<10;i++){
	document.write("<BR>Random "+i+" : "+s2.nextLetter(s2.nextBoolean()));
}

A voir également

Ajouter un commentaire

Commentaire

LeFauve42
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Salut,

Effectivement ca peut etre pratique, mais :
- Tu utilises la surcharge de methodes, et ce n'est pas possible avec JavaScript. Si tu veux vraiment que ta fonction soit utilisable sans argument, compare les a 'undefined' (avec === ou !== si tu ne veux pas de problemes quand 0 est passe).
- Ta gestion de 'limit' dans nextInt est desastreuse. En effet, si tu n'as vraiment pas de chance, ton programme peux rester planter ad eternam (c'est rare, mais ca peut arriver). utilise simplement l'operateur modulo pour avoir le meme resultat dans un temps fini (et constant, ce qui peut etre necessaire pour un jeux par exemple).
- Ton nextBoolean est n'est pas optimise du tout (ca pourrait etre "return Math.random()<.5;").
- Meme chose pour ton nextLetter :
- Pourquoi rappeler ta fonction nextInt alors qu'un simple "Math.floor(Math.random()*26)" ferait l'affaire ?
- Ta chaine/tableau pourrait etre cree dans ta classe, plutot que d'etre realouee a chaque appel.

Eric

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.