Newsgroup: it.comp.lang.javascript
Titolo: random particolare

avrei bisogno di generare numeri casuali compresi in un certo range(e
fin qui ci sono),ma sempre diversi.qualcuno ha qualche 
idea.vi
ringrazio in anticipo

 ringrazio in anticipo
Beh, dipende da qual è il range (in particolare, la sua dimensione) e da
quante estrazioni devi fare. Si possono usare diverse tecniche a seconda
delle specifiche.
-- 
Nando [?]
Apostolo della Prova

 --
il range è tra 1 e 4 e devo estrarre tutti e 4 i 
numeri.in
 pratica
devo decidere un ordine di partenza per max 4 
giocatori.in
 realtà
volevo farlo facendo un lancio di dado quindi il range sarebbe stato
tra 1 e 6.poi nn riuscivo e sono passato all'idea del range al massimo
tra 1 e 
4.il
 problema in entrambi i casi sono i numeri random
uguali.ti ringrazio se riesci a darmi un aiuto

 uguali.ti ringrazio se riesci a darmi un aiuto
E' abbastanza semplice, se il range è così ristretto. Io opterei per
utilizzare un oggetto destinato a indicare i numeri che sono stati
estratti, sfruttando la "square bracket notation". Una cosa del genere:
var MAX_NUM = 4; // si può cambiare a piacimento
function intRandom() {
  return Math.ceil(Math.random()*MAX_NUM);
}
function startOrder() {
  var rndObj = {},
      rndArr = [],
      rndNum;
  var debugString = "";
  for (var i=0;i<MAX_NUM;i++) {
    do {
      rndNum = intRandom();
      debugString += (rndNum+" - ");
    } while (rndObj[rndNum]);
    rndObj[rndNum] = true;
    rndArr[i] = rndNum;
  }
  alert(debugString);
  return rndArr;
}
window.onload = function() {
  var startArray = startOrder(),
      s="Ordine di partenza:\n";
  for (var i=0,n=startArray.length;i<n;i++)
    s+=(i+". numero "+startArray[i]+"\n");
  alert(s);
}
La stringa debugString è lì solo per mostrare quali numeri vengono generati
e come funziona il meccanismo di "scarto" dei duplicati.



ti ringrazio davvero sei stato un validissimo e indispensabile
aiuto.grazie ancora mille

 estratti, sfruttando la "square bracket notation".
Ma in pratica ciò che deve fare è un mescolamento. In tal caso,
sarebbe forse più opportuno utilizzare proprio un algoritmo che
fa questo, tipo il Fisher-Yates:
	Array.prototype.shuffle = function(){		
		for (var i = this.length-1, k, v; i > 0; i--){			
			v = this[i];
			this[i] = this[(k = ((i+1) * Math.random())>>0)];
			this[k] = v;
		}
		return this;
	}
	var players = [1,2,3,4];
	alert( players.shuffle() );
Mi pare tra l'altro che ne sia già stato discusso neanche molto
tempo fa.
-- 
~ "Chi ci priva della libertà in nome della sicurezza,
non si merita nessuna delle due cose, nè la libertà,
nè la sicurezza." (Henry Adams)

 tempo fa.
Sì, vero; passato di mente mi era.


 Ancora non ho capito perché lo shift a destra "tronca"
Umh, forse è perché, prima di applicare l'operatore, gli operandi vengono
convertiti in interi?


 nonostante abbia dato un occhio alla reference :)
"The operands of all bitwise operators are converted to signed 32-bit
integers in big-endian order and in two's complement format." 
Lo dissi anche all'epoca. :)
-- 
~ "Un uomo è più 'grande' di un altro solo se sale sulle sue spalle."
(Bertold Brecht)

 Lo dissi anche all'epoca. :)
Seeeeeeeeee, zer0! Di solito chiedo al mio pesce rosso di aiutarmi a
ricordare le cose, figurati :-D
