2013-01-05 5 views
2

J'essaie d'obtenir une liste de nombre aléatoire et le mettre dans la file d'attente sans aucune répétition du nombre aléatoire.nombre unique aléatoire dans java

 int number = 40; 

     for (int j = 0; j<number; j++) 
     { 
      int pick = random.nextInt(number); 
      myQueue.add(Integer.toString(pick)); 
     } 
     System.out.println("the queue size: "+myQueue.size()); 
     Iterator it = myQueue.iterator(); 
     while(it.hasNext()){ 
       String iteratorValue = (String)it.next(); 
       System.out.println("queue next value: "+iteratorValue); 
     } 

avec le code ci-dessus, je me suis certaine répétition du nombre aléatoire

de quelqu'un sait comment faire ??

+2

Y a-t-il des plages sur quels nombres aléatoires vous pouvez générer? – templatetypedef

+0

la gamme est 40 –

+1

Ceci est populaire aujourd'hui. –

Répondre

8

Que diriez-vous ceci:

List<String> list = new ArrayList<String>(number); 

for (int i = 0; i < number; i++) 
    list.add(Integer.toString(i)); 

Collections.shuffle(list); 

myQueue.addAll(list); 

« Ajout de nombres aléatoires uniques » dans une certaine plage équivaut à ajouter tous les chiffres dans la plage puis brouiller le résultat.

+1

Heheheh. Shuffle toute la journée – nullpotent

+0

anw, j'ai eu une erreur dans Collections.shuffle (myQueue). J'ai importé le java.util.Collections ... l'erreur est "ne convient pas trouvé pour shuffle" –

+0

'Collections.shuffle' ne fonctionne que pour un' List', pas un 'Queue'. Peut-être mélanger une liste d'abord, puis mettre dans la file d'attente? –

3

Créez un ensemble et ajoutez-y des nombres lorsque vous les générez. Chaque fois que vous générez un nouveau numéro, vérifiez si le Set contient déjà cette valeur. Continuez à générer de nouveaux numéros et à vérifier l'ensemble jusqu'à ce que vous en trouviez un qui n'est pas déjà là.

Quelque chose le long de ces lignes ... (Notez que Set.add(...) renvoie false si la valeur est déjà dans l'ensemble, de sorte que le do-while continue jusqu'à ce qu'un numéro unique est généré.)

int number = 40; 
    Set mySet = new HashSet(); 
    for (int j = 0; j<number; j++) 
    { 
     Integer pick; 

     do{ 
      pick = random.nextInt(number); 
     } while(!mySet.add(pick)); 
     myQueue.add(Integer.toString(pick)); 
    } 
    System.out.println("the queue size: "+myQueue.size()); 
    Iterator it = myQueue.iterator(); 
    while(it.hasNext()){ 
      String iteratorValue = (String)it.next(); 
      System.out.println("queue next value: "+iteratorValue); 
    } 

Bien que mentionné par ARS, vous ne semblez pas chercher un nombre unique aléatoire, mais plutôt une liste aléatoire de tous les nombres entre 0 et 40. Si c'est le cas, utilisez sa solution comme c'est une meilleure façon pour atteindre cet objectif.

0

S'il existe une petite plage de nombres aléatoires, vous pouvez simplement générer une liste avec les valeurs disponibles et utiliser Collections.shuffle dans la liste.