2013-04-29 6 views
0

Je tente de générer un tableau 2d à l'aide d'un générateur aléatoire. fondamentalement, chaque colonne devrait contenir une valeur aléatoire entre 1 et 50 qui n'est pas répétée mais le problème est, je ne peux pas obtenir une valeur de répétition sur la même ligne, ou n'importe quelle autre ligne ou colonne dans le programme. En d'autres termes, chaque entier I ne devrait s'afficher qu'une seule fois. Mes objets ont été créés via une liste chaînée et j'y intégrerai probablement l'algorthim une fois que je l'aurai compris, mais pour l'instant, voici ce que j'ai fait.Générateur aléatoire Java sans répétition

int[] array = new int[50]; 



     for(int i=1;i<=9;i++) 
     { 

     int[] grades = new int[5]; 
      for(int j=0;j<=4;j++) 
      { 

      int unique = gen.nextInt(50)+1; 


      grades[j] = unique; 
      } 
      list.add(new Student(i, grades)); 

     } 

     System.out.println(list); 

Ma sortie:

Student1: 20 49 45 16 13 
Student2: 28 10 11 30 6 
Student3: 13 25 37 31 49 
Student4: 8 23 8 12 32 
Student5: 22 18 35 2 7 
Student6: 35 8 16 23 36 
Student7: 35 3 15 42 2 
Student8: 43 12 44 2 35 
Student9: 12 21 36 23 12 

Donc, ma question est la suivante. Comment puis-je implémenter la génération aléatoire sans répéter les valeurs. Normalement j'essaierais une liste de collection maintenant, mais j'essaye de faire ceci using java.util.Random Personnellement, je ferais ceci d'une manière différente mais je suis instruit. Merci

Répondre

6

Voici ce que je ferais:

Prenez un ArrayList de numéros 1-50, puis utilisez Collections.shuffle sur la liste.

+0

Simple et élégant, c'est la bonne solution. – nook

+0

C'est la solution pratique mais existe-t-il un moyen de l'implémenter en utilisant le générateur Random()? Je suis sûr que je suis chargé de le faire de cette façon. – user2188838

+0

@ user2188838: Bien sûr, dans ce cas, faites ce que vlad-ardelean a dit. Collections.shuffle utilise un générateur aléatoire, btw. –

0

Vous pouvez vérifier si le numéro est unique avant de l'accepter. Par exemple, vous pouvez essayer quelque chose comme:

int count=0; 
List<Integer> list=new ArrayList<Integer>(); 
    while(count<50){ 
     int num=random.nextInt(50); 
      if(!list.contains(num)){ 
       list.add(num); 
       ++count; 
      }      
    } 
+0

Donc, fondamentalement, Faites une liste de tableau et randomisez un nombre entier et vérifiez si cet entier était déjà utilisé ou non. Ensuite, augmentez chaque valeur jusqu'à atteindre 50, n'est-ce pas? – user2188838

+0

Oui, c'est essentiellement ce que j'ai suggéré. Toute collection fonctionnerait, je viens de suggérer une liste car elle a déjà été mentionnée. J'utiliserais n'importe quelle structure de données que votre professeur vous a suggéré de stocker les résultats et si nécessaire (la structure de données ne l'a pas déjà) créez une méthode contains qui renvoie un booléen pour vérifier si le nombre existe. –

+0

La mise en œuvre de la liste de tableaux I J'ai fini par imprimer tout ce qui se trouvait dans un motif pour chaque ligne, alors j'ai décidé d'éviter complètement cela. Je suis tombé sur ce guide en ligne, http://stackoverflow.com/questions/16284894/java-random-generator-without-repeat?answertab=active#tab-top Fondamentalement, il est supposé générer le nombre et ajouter une valeur ce n'est pas déjà en place. le problème avec cette implémentation, c'est que je continue d'obtenir des erreurs de symboles malgré tout correctement (spécfiquement sur les variables pour random et l'objet.) Je préfère travailler dessus de cette façon car cela semble plus facile. – user2188838

Questions connexes