sabato 7 luglio 2012

Generare numeri casuali senza ripetizioni

L'esempio mostra come generare una serie di numeri x casuali senza ripetizioni ponendo un limite numerico y.
Ossia in questo caso prendo una serie di 10 cifre tra i numeri 1 e 50 senza che ci sia una ripetizione di numeri all'interno della serie.
public class test {
    public static void main(String[] args) {
        for (int intNum : genNumber()) {
            System.out.print(""+intNum+" ");
        }
    }
    
    private static List genNumber(){
        Random rng = new Random();
        List generated = new ArrayList(); 
        int x = 10;    //numbers to get
        int y = 50;    //max number
        for (int i = 0; i < x; i++) 
        { 
            while(true) 
            { 
                Integer next = rng.nextInt(y) + 1; 
                if (!generated.contains(next)) 
                { 
                    generated.add(next); 
                    break; 
                } 
            } 
        } 
        return generated;
    }
}
Risultato: 26 21 15 29 36 18 49 9 8 38