qualcuno può dirmi come generare numeri casuali con nessuna ripetizione esempioAndroid - generare numeri casuali con nessuna ripetizione
random (10) dovrebbe (potrebbe) tornare 3,4,2,1,7,6 , 5,8,9,10 con nessuna ripetizione
Grazie
qualcuno può dirmi come generare numeri casuali con nessuna ripetizione esempioAndroid - generare numeri casuali con nessuna ripetizione
random (10) dovrebbe (potrebbe) tornare 3,4,2,1,7,6 , 5,8,9,10 con nessuna ripetizione
Grazie
vorrei suggerire di aggiungere i numeri per un ArrayList<Integer>
e quindi utilizzare Collections.shuffle()
randomizzare loro ordine. Qualcosa di simile a questo:
ArrayList<Integer> number = new ArrayList<Integer>();
for (int i = 1; i <= 10; ++i) number.add(i);
Collections.shuffle(number);
è piaciuto! una domanda, se eseguo Collection.Shuffle due o tre volte fornirà un ordine diverso? – Yogesh
Sono abbastanza sicuro che lo farà. Non riesco a trovare una ragione per cui non dovrebbe. Abbastanza facile da controllare, eh? ;) –
Fai un elenco di numeri generati, quando il numero appena generato è già in questa lista si effettua un nuovo numero casuale.
Random rng = new Random(); // Ideally just create one instance globally
List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < numbersNeeded; i++)
{
while(true)
{
Integer next = rng.nextInt(max) + 1;
if (!generated.contains(next))
{
// Done for this iteration
generated.add(next);
break;
}
}
}
sfortunatamente questo metodo non scala molto bene –
Se ci sono solo alcuni numeri, a meno di 100, credo di soluzione potrebbe essere quella di creare una matrice booleana e una volta che si ottiene un numero, impostare la posizione della matrice a true. Non penso che ci vorrà molto tempo prima che tutti i numeri compaiano. Spero che sia d'aiuto!
Cheers!
I miei due centesimi
public Collection<Integer> getRandomSubset(int max,int count){
if(count > max){
throw new IllegalArgumentException();
}
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0 ; i < count ;i++){
list.add(i);
}
Collections.shuffle(list);
return list.subList(0, count);
}
Mi piace il miglioramento 'subList()' in questa soluzione - ottimo per distribuire una mano di carte da un mazzo –
vi aiuterà a: http://stackoverflow.com/questions/4040001/java-creating-random-numbers-with-no-duplicates – Thiru