View Full Version : [Java] funzione random
sto programmando in android e di conseguenza con il codice java.
Devo determinare una sequenza casuale di 16 numeri diversi tra loro e compresi tra 0 e 16.
Ho realizzato questa funzione.
count=0;
while(count<16){
x = (int)(Math.random()*16);
controllo=true;
for (int k=0; k<16; k++)
{
if (x == random[k])
controllo=false;
}
if( controllo)
{
random[count]=x;
count++;}
}//fine ciclo while
Il codice viene compilato correttamente, ma l'esecuzione si blocca, come se il ciclo while fosse infinito. Non riesco a capire cosa non vada, potete aiutarmi??
clockover
04-05-2011, 23:58
Il più grande pregio di Python.... è obbligatoria l'indentazione....
Detto ciò ti consiglio di seguire questa procedura
1) ti crei una List di Interi (meglio se un ArrayList così almeno ne guadagni in efficienza dato che ha l'accesso diretto ai dati) da 0 a 16
2) ti crei un nuovo oggetto Random.. es Random rn = new Random();
3) fai un ciclo che ti svuota randomicamente l'ArrayList! Il valore random però non andrà a darti un valore da 0 a 16, ma bensì ti darà un valore da 0 alla dimensione dell'ArrayList, la quale ad ogni passata diminusce! In questo modo elimini dall'ArrayList un elemento sempre diverso fino a svuotarlo completamente
banryu79
05-05-2011, 09:13
Detto ciò ti consiglio di seguire questa procedura
1) ti crei una List di Interi (meglio se un ArrayList così almeno ne guadagni in efficienza dato che ha l'accesso diretto ai dati) da 0 a 16
Non conosco il contesto di Android, ma se c'è il Collection Framework forse c'è anche il metodo statico "swap" nella classe utility Collections...
In tal caso passi la lista di interi creata a swap, swap te la "scombina" tutta, e poi la iteri.
Il codice viene compilato correttamente, ma l'esecuzione si blocca, come se il ciclo while fosse infinito. Non riesco a capire cosa non vada, potete aiutarmi??
non
k < 16
ma
k < count
Devi considerare che nell'array il valore "zero" c'è già. Se lo fai ciclare su tutti i valori dell'array, poichè lo zero c'è già (in quanto valore di default dei componenti di un array di interi), passa i primi 14 check ma quando arriva al 15°, che non può che essere zero perchè gli altri 14 sono già stati estratti, il valore risulta essere già presente (è quello di random[15]) pur non essendo mai stato estratto (count è a 15 e vorrebbe diventare 16), da cui il ciclo infinito.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.