Oppure

Loading
15/10/09 17:30
dr_stein
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
Vector<Integer> base = new Vector<Integer>();
for(int i=0; i<cifre; i++){
	int x = (int)(Math.random() * 9);
	base.add(x);
}
aaa
16/10/09 4:35
Matthew
Hai bisgno di un ciclo che scorra il vettore e controlli che la cifra non sia già stata scritta.


Vector<Integer> base = new Vector<Integer>();
for(int i=0; i<cifre; i++)
{
    int x = (int)(Math.random() * 9);
    bool flag=true;
    for(int j=0; j<base.size(); j++)
    {
          if(base[j]==x)
          {
               flag=false;
               i--;
               break;
          }
    }
    if(flag) base.add(x);
} 


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 16/10/09 4:38
aaa
17/10/09 10:04
dr_stein
Postato originariamente da Matthew:

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


Vector<Integer> base = new Vector<Integer>();
for(int i=0; i<cifre; i++)
{
    int x = (int)(Math.random() * 9);
    bool flag=true;
    for(int j=0; j<base.size(); j++)
    {
          if(base[j]==x)
          {
               flag=false;
               i--;
               break;
          }
    }
    if(flag) base.add(x);
} 


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!)
aaa
17/10/09 18:21
Matthew
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.
aaa