Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644

    [java]Random, qualcosa che non va....

    Ho questa porzione di codice:



    codice:
    for(int i = 0; i < dim_ridotto; i++) {
    			Random rand = new Random();
    			
    			int r = rand.nextInt(dim_ridotto);
    			System.out.println(r);
    			
    			CoppiaAlternativa scelto = (CoppiaAlternativa)V.elementAt(r);
    			v20.add(scelto);
    			
    			System.out.println("++++Ho aggiunto a ArchiRidotto la coppia: (" +scelto.getNodoInizialePrimo()+","+scelto.getNodoFinalePrimo()+")("+scelto.getNodoInizialeSecondo()+","+scelto.getNodoFinaleSecondo()+")");
    			
    		}

    ma non capisco per quale motivo il numero random r generato a ogni iterazione è sempre lo stesso....

    nell mio esempio dim_ridotto è uguale a 4 e in tutte e 4 le iterazioni il numero r viene impostato uguale a 3 selezionandomi dal Vector madre sempre lo stesso elemento...mentre a me serve che siano diversi ogni volta...

    qualcuno potrebbe darmi una mano???

    ciao ciao
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  2. #2
    Non ho capito perchè usi la classe random quando c'è il metodo random della classe Math. Prova a mettere

    codice:
    r = Math.random()*10;  //notare che così genera numeri da 0 a 10
    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  3. #3
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    infatti dopo ho provato anche con random della classe Math ma lanciando il metodo mi crea a ogni iterazione sempre 0 come numero random...non capisco perchè...
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  4. #4
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    ho modificato il codice creando r in double e poi facendo il cast in int ad una operazione successiva, la cosa è migliorata nel senso che adesso è più casuale,

    ma il problema è che io vorrei pescare un certo numero di elementi diversi dal Vector ed invece con questo metodo alcune volte mi pesca lo stesso...qualcuno ha un idea???
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  5. #5
    Il metodo random non è altro che una funzione del tempo per cui se tu chiami in maniera molto ravvicinata il metodo random più volte il risultato sarà quasi sempre lo stesso.

    L'unico sistema che conosco è mettere dell'attesa tra le diverse chiamate... ovviamente non so se questo è accettabile nel tuo caso.

    In alternativa si potrebbe passare alla funzione random un parametro dato per esempio dalla somma di ascissa e ordinata della posizione del mouse... ma se l'utnte sta usando la tastiera avrai sempre lo stesso risultato.

    Il alternativa ancora mescoli i due metodi e verifichi quale dei due risultati fornire a seconda dell'ultimo risultato fornito...

  6. #6
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    bè...dal momento che per il problema che devo risolvere, di chiamate di random non ne devo fare più di 10 vorrei provare la soluzione del far passare un po di tempo tra un random e l'altro....ma quanto si tratta di aspettare???

    e che classe devo usare???

    altrimenti mi sa che elimino dal vector l elemento appena selezionato (tanto Vector è una copia dell'insieme principale) ripeto l iterazione, in questo modo sono sicuro che pesca sempre archi diversi...
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  7. #7
    Onestamente non so quanto tempo serva perchè è una soluzione che non mi soddisfa e non ho mai studiato.
    Per la classe purtroppo non ho qui i manuali...

  8. #8
    Prima di tutto, se leggessi la documentazione su Math.random(), scopriresti che questo metodo ritorna numeri tra 0.0 e 1.0, per questo ti vengono numeri con la virgola. Se noti nel pezzo di codice che ti ho postato io ho appunto messo una moltiplicazione per 10, serviva appunto per rendere i numeri da 0 a 10 potendo quindi utilizzare direttamente una variabile int senza fare giri strani.

    Per quanto riguarda mettere del tempo puoi utilizzare la classe timer che in sostanza crea appunto un timer che quando scade può eseguire certe operazioni.

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  9. #9
    Utente di HTML.it L'avatar di Wave
    Registrato dal
    May 2003
    Messaggi
    644
    Conoscevo il metodo .random() della classe Math e sapevo ritornasse un double...ma fatto stà che se inizializzavo r come un int mi venivano tutti numeri uguali mentre inizializzando r come double e poi facendo un cast in int i numeri avevano gia una certa (anche se piccola casualità...nn chiadermi perchè ma è così...ho fatto delle prove...

    grazie cmq dell'aiuto..

    ciao ciao
    LINUX
    Powered by Ubuntu
    Powered by MacOS X


    ...vivi la tua vita come se ogni giorno fosse l'ultimo, poichè un giorno lo sarà...

  10. #10
    Originariamente inviato da Wave
    Conoscevo il metodo .random() della classe Math e sapevo ritornasse un double...ma fatto stà che se inizializzavo r come un int mi venivano tutti numeri uguali mentre inizializzando r come double e poi facendo un cast in int i numeri avevano gia una certa (anche se piccola casualità...nn chiadermi perchè ma è così...ho fatto delle prove...

    grazie cmq dell'aiuto..

    ciao ciao
    Il perchè dovrebbe essere dovuto al fatto che usando una variabile int il numero generato viene troncato mentre se usi un double mantiene anche tutti i numeri dopo la virgola che dovrebbero differire di più.

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.