Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - numeri casuali in un vector
Forum - Java - numeri casuali in un vector

Avatar
dr_stein (Normal User)
Newbie


Messaggi: 3
Iscritto: 15/10/2009

Segnala al moderatore
Postato alle 19:30
Giovedì, 15/10/2009
ciao a tutti, mi servirebbe un modo per inserire in un Vector di interi un numero di cifre che varia di volta in volta (identificato dalla variabile "cifre") in modo che le cifre presenti nel vettore siano tutte diverse tra di loro.

questo è ciò che ho scritto io, inserisce le cifre ma senza controllare che siano tte diverse. qualcuno potrebbe darmi qualche consiglio?
grazie
Codice sorgente - presumibilmente Java

  1. Vector<Integer> base = new Vector<Integer>();
  2. for(int i=0; i<cifre; i++){
  3.         int x = (int)(Math.random() * 9);
  4.         base.add(x);
  5. }


PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 6:35
Venerdì, 16/10/2009
Hai bisgno di un ciclo che scorra il vettore e controlli che la cifra non sia già stata scritta.

Codice sorgente - presumibilmente Java

  1. Vector<Integer> base = new Vector<Integer>();
  2. for(int i=0; i<cifre; i++)
  3. {
  4.     int x = (int)(Math.random() * 9);
  5.     bool flag=true;
  6.     for(int j=0; j<base.size(); j++)
  7.     {
  8.           if(base[j]==x)
  9.           {
  10.                flag=false;
  11.                i--;
  12.                break;
  13.           }
  14.     }
  15.     if(flag) base.add(x);
  16. }



Il comando "i--" è indispensabile perchè siccome non ha aggiunto niente deve riprovare.
Per il resto mi sembra abbastanza chiaro.
Non ho provato a compilarlo ma dovrebbe andare, in ogni caso l'idea è quella...

[EDIT]: Ad essere sinceri questo codice non è molto efficiente, perchè ogni volta sorteggia fra tutti i numeri, quindi potrebbe essere un po' lento.
Per fare un lavoro proprio ben fatto dovresti evitare che i numeri già usciti possano uscire ancora, ma ovviamente in quel modo il codice diventerebbe più lungo...

Ultima modifica effettuata da Matthew il 16/10/2009 alle 6:38
PM Quote
Avatar
dr_stein (Normal User)
Newbie


Messaggi: 3
Iscritto: 15/10/2009

Segnala al moderatore
Postato alle 12:04
Sabato, 17/10/2009
Testo quotato

Postato originariamente da Matthew:

Hai bisgno di un ciclo che scorra il vettore e controlli che la cifra non sia già stata scritta.

Codice sorgente - presumibilmente Java

  1. Vector<Integer> base = new Vector<Integer>();
  2. for(int i=0; i<cifre; i++)
  3. {
  4.     int x = (int)(Math.random() * 9);
  5.     bool flag=true;
  6.     for(int j=0; j<base.size(); j++)
  7.     {
  8.           if(base[j]==x)
  9.           {
  10.                flag=false;
  11.                i--;
  12.                break;
  13.           }
  14.     }
  15.     if(flag) base.add(x);
  16. }



Il comando "i--" è indispensabile perchè siccome non ha aggiunto niente deve riprovare.
Per il resto mi sembra abbastanza chiaro.
Non ho provato a compilarlo ma dovrebbe andare, in ogni caso l'idea è quella...

[EDIT]: Ad essere sinceri questo codice non è molto efficiente, perchè ogni volta sorteggia fra tutti i numeri, quindi potrebbe essere un po' lento.
Per fare un lavoro proprio ben fatto dovresti evitare che i numeri già usciti possano uscire ancora, ma ovviamente in quel modo il codice diventerebbe più lungo...



grazie mille.. proprio quello che mi serviva!!
(un unico appunto.. per guardare un elemento in un Vector è sbagliato usare base[j] ma si usa base.get(j).probabilmente è una svista.. per il resto è perfetto!)

PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 20:21
Sabato, 17/10/2009
Mi sono confuso con il C++, è da un po' che non programmo in Java...
Credo che la funzione Java get() equivalga al C++ at(). (mi si corregga se sbaglio)
Quindi se peschi un valore con [] non c'è controllo dei limiti del vector. Però se sei sicuro che l'indice rientri sempre nei limiti, questo metodo è più efficiente.
In linea generale però è meglio usare get(), anche se un pelo più lento.

PM Quote