Newsgroup: it.comp.java
Titolo: random values.. non random...

Ciao a tutti,
dato il seguente codice:
	for (int i = 0; i < VERTICAL_SIZE_GRID; i++) {
             for (int j = 0; j < HORIZONTAL_SIZE_GRID; j++) {
                     grid[i][j] = new Cell();
                     grid[i][j].state =  r.nextInt(2);
                     System.out.print(grid[i][j].state+" "); 
                     }
             System.out.println();
             }
          System.out.println("");
Qualcuno sa spiegarmi come mai la funzione random mi restituisce sempre 
gli stessi numeri?
1 0 1 0
0 1 1 0
1 1 1 0
0 1 0 1
Qualcosa di sbagliato?
Grazie,
/L.

 gli stessi numeri?
Quale funzione random ? Non ne vedo nessuna nel tuo codice ...
Comunque immagino tu usi Mat.random() il quale, da documentazione
"Returns a double value with a positive sign, greater than or equal to
0.0 and less than 1.0."
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

> Quale funzione random ? Non ne vedo nessuna nel tuo codice ...
Appunto...
Forse ti riferisci alla chiamata r.nextInt(), però cos'è r?
Ciao
Marco 

Scusate, avete ragione, non era molto chiaro:
Random r = new Random(2);
         for (int i = 0; i < VERTICAL_SIZE_GRID; i++) {
             for (int j = 0; j < HORIZONTAL_SIZE_GRID; j++) { 
                     grid[i][j] = new Cell();
                     grid[i][j].state =  r.nextInt(2);
                     System.out.print(grid[i][j].state+" "); 
                     }
             System.out.println();
             }
ecco tutto quanto: quello che non capisco è perchè mi vengano sempre gli 
stessi valori...
grazie,
/L.


 /L.
E leggere la documentazione?!
Chiamando nextInt(2) su un'istanza di Random viene ritornato
un numero compreso tra 0 e 1.
Successive chiamate a nextInt(2) produrranno una sequenza
pseudocasuale di 0 e di 1 con distribuzione uniforme.
Ciao!
Roberto
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 gli stessi numeri?
Dipende dal seed, ovvero il numero con cui inizializzi il generatore.
In sostanza, un generatore di numeri casuali non sara' mai veramente 
casuale, di fatto c'e' un algoritmo che produce una sequenza di numeri 
che sembrano casuali ma la sequenza e' fissa.
La sequenza e', appunto, scelta in base al seed, per cui invocazioni in 
momenti diversi di generatore inizializzato con lo stesso seed 
produrranno la stessa sequenza.
Saluti
CarMas

 Random r = new Random(2);
Prova ad usare il costruttore senza argomenti, che se non ricordo male 
viene inizializzato coi millisecondi attuali... cosi' almeno se fai 
girare il codice piu' volte avrai dei numeri diversi.
Giusto per parlare, l'unico inconveniente in questo caso e' che se 
istanzi due Random in meno di un millisecondo, produrranno la stessa 
sequenza :D
Saluti
CarMas

> sempre gli stessi numeri?
C> Dipende dal seed, ovvero il numero con cui inizializzi il
C> generatore.  In sostanza, un generatore di numeri casuali non sara'
C> mai veramente casuale, di fatto c'e' un algoritmo che produce una
C> sequenza di numeri che sembrano casuali ma la sequenza e' fissa.
Yup, finalmente qualcuno che lo ricorda che i numeri sono PSEUDOcasuali :).
Se non ricordo  male la teoria che c'è sul  Knuth (pesantuccia e vista
alla leggera una decina di  anni fa) questi algoritmi generano "cicli"
di valori, il difficile sta a scrivere algoritmi con "cicli lunghi".
Knuth per scopo didattico e per humor pubblicava come primo esempio un
algoritmo veramente  complesso, con salti casuali etc  etc etc... Solo
per indicare subito che c'era un seme che originava una sequenza di un
solo elemento, se stesso...
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

 solo elemento, se stesso...
Mi pare di averne sentito parlare, come funziona in linea generale un 
algoritmo del genere?
(credo che con gli ultimi accorgimenti la lunghezza delle ripetizioni 
debba essere elevata e che la possibilità di ottenere valori uguali dopo 
un basso numero di cicli sia minima...)
Ciao,
jRed