Oppure

Loading
14/01/14 13:20
Poggi Marco
Postato originariamente da Dice:Questa è la mia classe Dado:

Codice sorgente - presumibilmente C++
public class Dado
{
int numeroFacce;

public Dado(int n)
{
numeroFacce = n;
}

public int LancioDado()
{
Random rnd = new Random();

int risultato = rnd.Next(1, numeroFacce + 1);

return (risultato);
}
}


Se metto System.currentTimeMillis() mi da errore con lo using; quale dovrei usare?

Si potrebbe dichiarare un oggetto statico del tipo random, comune a tutte le istanze della classe, invece che una variabile locale nel metodo LancioDado().
Ultima modifica effettuata da Poggi Marco 14/01/14 13:23
aaa
14/01/14 14:59
tuttodiMC
Esattamente come ha detto Poggi Marco, dovresti mettere la variabile rnd al di fuori del metodo in modo da non crearla nuovamente quando riutilizzi il metodo. In questo modo tu hai tirato fuori lo stesso problema dell'altra discussione, ovvero, che inizializzavi più dadi con lo stesso seme.
aaa
14/01/14 17:48
Dice
Ok ragazzi, adesso ho un problema che non mi era mai capitato:

ho fatto come mi avete detto, cioè ho creato solo una istanza del dado e ho fatto 5 lanci con quella istanza;
io so che questo metodo come mi avete detto voi funziona perché ho verificato anche con il debugger che vengano fuori cinque risultati diversi, e va benissimo.

Il fattaccio è che quando eseguo il programma NON LO FA :om:
mi mette sempre i risultati tutti uguali, sempreeee!

Ma perchèè???? Nel debugger ho visto istruzione per istruzione e andava benissimo, ma quando lo eseguo cambia. Che roba è mai questa??
aaa
14/01/14 18:01
ZioCrocifisso
Postato originariamente da ZioCrocifisso:

Conserva l'oggetto Random su Dado (creato nel costruttore) e usalo su LancioDado, usando un solo dado, perché creando più oggetti Random nello stesso istante li crei tutti con lo stesso seme, e quindi generano la stessa sequenza.
aaa
14/01/14 18:18
Dice
Ho detto che quella cosa l'ho gia corretta:
adesso ho istanziato un solo oggetto dado e lanciato 5 volte; ho detto che ho anche verificato con il debugger che funziona.

La cosa che mi sembra impossibile è che mi funziona bene solo quando uso il debugger, mentre quando lo vado ad eseguire mi da sempre i 5 risultati uguali :(

Se per caso ho sbagliato a creare la classe dado mi potreste mettere il codice di come modificarlo perfavore?
Perchè sto quasi per impazzire; ho fatto mille prove diverse, ma non ce la faccio :(
aaa
14/01/14 18:32
pierotofy
Posta il codice...
Il mio blog: piero.dev
14/01/14 19:46
ZioCrocifisso
In quel post non ho scritto solo di usare un'istanza di Dado, ma anche di conservare Random, invece di crearne uno per ogni chiamata a LancioDado. Mettilo dunque come campo di Dado, e crealo nel costruttore.
Ti ho anche spiegato il motivo per cui facendo come hai fatto tu non funziona, che probabilmente spiega anche perché col debugger ti funziona e senza no: eseguendo il programma passo passo, i vari Random vengono creati in momenti diversi, e quindi con un diverso seed.
Ultima modifica effettuata da ZioCrocifisso 14/01/14 19:48
aaa
15/01/14 16:49
Dice
Allora, ho modificato la mia classe Dado in questo modo:

public class Dado
    {
        private int risultato;      //risultato del lancio del dado
        //costruttore
        public Dado()
        {
            //invoco il metodo per il lancio del dado
            this.LancioDado();
        }
        //metodo per lanciare il dado
        public void LancioDado()
        {
            //istanzio un oggetto di tipo random
            System.Random rnd = new System.Random();
            
            //ottengo un numero casuale tra 1 e 6
            risultato = rnd.Next(1, 6);
        }
        //proprietà per far ritornare il risultato del lancio del dado
        public int Risultato
        {
            get { return risultato; }
        }
    }


E nel codice vado a fare questo:

//istanzio un'oggetto della classe Dado
                            Dado dado = new Dado();
                            //lancio i dadi e memorizzo i risultati
                            risultato1 = dado.Risultato;
                            risultato2 = dado.Risultato;
                            risultato3 = dado.Risultato;
                            risultato4 = dado.Risultato;
                            risultato5 = dado.Risultato;


Ma non riesco a risolvere il mio problema :(

questa volta ho fatto come mi avete detto: ho creato il numero casuale nel costruttore (attraverso un metodo)
ma non mi va, perchè? Dove sbaglio?
aaa