Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    3

    [java] generare numeri casuali tutti diversi

    Salve a tutti. Sono nuova del forum e anche da poco impegnata con la programmazione java. Avrei necessità di generare 40 numeri casuali (compresi tra 0 e 39) però senza duplicati. Potreste aiutarmi??? Ho preso visione di un'altra discussione in merito a questo argomento ma purtroppo sono alle prime armi e non ci ho capito molto...
    Io mi sono cimentata un po', ma purtroppo il codice mi va in loop. Vi posto il codice che ho scritto, cosi magari qlkn può aiutarmi a capire dove sbaglio.

    codice:
    int vettore[] = new int [40];
    int indice=0;
    int j=0;
    boolean ripetuto = false;
    		
    while(j<40) 
    {
    	indice = (int) (39*Math.random());
    	ripetuto=false;
    	if(j==0) 
    	{
    		vettore[j]=indice;
    		j++;
    	}
    	else 
    	{
    		for(int i=0; i<j; i++)
    		{
    			if(indice==vettore[i])
    			{
    				ripetuto=true;
    			}	
    		}
    		if(ripetuto==false)
    		{
    			vettore[j]=indice;
    			j++;
    		}
    	}
    			
    }
    grazie a tutti in anticipo.

  2. #2
    Io penso che il tuo problema sia già posto male in origine.

    Se devi generare 40 numeri casulai compresi tra 0 e 39 (ovvero un intervallo di 40 numeri) senza ripetizioni non avrai altro che tutti i numeri da 0 a 39 però in ordine sparso.

    Quindi secondo me potresti usare una delle seguenti strade:
    1) riempire un vettore con i numeri da 0 e 39 e poi mischiarli (con criterio)
    2) generare i numeri in sequenza (da 0 a 39) e posizionarli casualmente nel vettore (senza riscrivere posizioni già scelte)
    3) creare un vettore vuoto, generare numeri casuali, verificare che il numero non è stato già generato ed inserirli in sequenza nel vettore (quello che stai cercando di fare tu)

    ad ogni modo la generazione di numeri casuali prevere:
    1) l'istanziamento di un Random
    2) la specifica di un seme
    3) la richiesta del prossimo intero casuale

    quindi:
    codice:
    Random generator = new Random(1000);
    generator.setSeed(System.currentTimeMillis());
    
    for ( int i=0; i < 40; i++ ) {
       generator.nextInt();
    }
    Administrator of NAMDesign.Net

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    3
    Il mio obbiettivo è appunto quello di mischiare 40 numeri (da 0 a 39).
    Come faccio a "riempire un vettore con i numeri da 0 e 39 e poi mischiarli (con criterio)"???
    E poi, l'istruzione int i = Math.random()*40; non è equivalente a quello che mi hai scritto tu?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da LeaderGL
    codice:
    Random generator = new Random(1000);
    generator.setSeed(System.currentTimeMillis());
    
    for ( int i=0; i < 40; i++ ) {
       generator.nextInt();
    }
    Perché crei un oggetto Random con seme 1000 e poi lo cambi con l'istante temporale corrente?


    Originariamente inviato da Smile87
    Il mio obbiettivo è appunto quello di mischiare 40 numeri (da 0 a 39).
    Come faccio a "riempire un vettore con i numeri da 0 e 39 e poi mischiarli (con criterio)"??? tu?
    Potresti usare il metodo Collections.shuffle(List). Al posto degli array tradizionali puoi usare ArrayList in modo da poter invocare shuffle :master:


    Originariamente inviato da Smile87
    E poi, l'istruzione int i = Math.random()*40; non è equivalente a quello che mi hai scritto tu?
    Math.random() restituisce un double compreso tra 0 e 1 (che poi devi castare ad int).
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    3
    Originariamente inviato da Alex'87
    Potresti usare il metodo Collections.shuffle(List). Al posto degli array tradizionali puoi usare ArrayList in modo da poter invocare shuffle :master:

    Scusami Alex, ma sono veramente alle origini... e gli ArrayList non li so usare... mi spiegheresti come funzionano?

  6. #6
    Originariamente inviato da Alex'87
    Perché crei un oggetto Random con seme 1000 e poi lo cambi con l'istante temporale corrente?
    hai ragione non ci avevo fatto caso.

    @Smile87: la soluzione dell'ArrayList anche secondo me nel tuo caso sarebbe l'ideale; i miei "suggerimenti" erano per farti arrivare ad una scelta di quel tipo: riempire un array e mischiarlo.
    Administrator of NAMDesign.Net

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Smile87
    Scusami Alex, ma sono veramente alle origini... e gli ArrayList non li so usare... mi spiegheresti come funzionano?
    codice:
    ArrayList<Integer> array = new ArrayList<Integer>(); // crea l'array
    for (int i = 0; i < 40; i++) {
        array.add(i); // inserisce il valore 'i' nell'array
    }
    
    Collections.shuffle(array); // mescola l'array
    Se poi vuoi tornare ad usare un array classico basta che fai
    codice:
    Integer[] array2 = array.toArray(new Integer[]{});
    Documentazione su ArrayList: http://java.sun.com/j2se/1.5.0/docs/...ArrayList.html
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317

    Moderazione

    Leggere anche il Regolamento interno per conoscere le regole di posting del codice (punto 6).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2025 vBulletin Solutions, Inc. All rights reserved.