Comment puis-je générer des 6 nombres aléatoires entre 1 et 6 à l'aide de Java?
Je suis face à un problème génératrices de 6 nombres aléatoires entre 1 et 6 en Java. Tous les chiffres doivent être uniques. Quand je rentre kolon valeur de 5, les tableaux doivent être comme ceci:
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
Je ne veux pas le programme pour générer les deux mêmes numéros. Quel est le problème ici?
Code:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter row quantity: ");
int kolon = input.nextInt();
Integer[][] dizi_asil = new Integer[kolon][6];
for (int i = 0; i < kolon; i++) {
Integer[] dizi = new Integer[6];
for (int j = 0; j < 6; j++) {
dizi[j] = (int) ((Math.random() * 6) + 1);
for (int u = 0; u < 1; u++) {
for (int k = 0; k < j; k++) {
while (dizi[k] == dizi[j]) {
dizi[j] = (int) ((Math.random()* 6) + 1);
u++;
}
}
}
dizi_asil[i][j] = dizi[j];
}
Arrays.sort(dizi_asil[i]);
}
for (int i = 0; i < dizi_asil.length; i++) {
for (int k = 0; k < dizi_asil[i].length; k++) {
System.out.print(dizi_asil[i][k] + "\t");
}
System.out.println();
}
6 numéros uniques entre 1 et 6 ne sont pas aléatoires. Ils seront toujours 1,2,3,4,5,6. Leur ordre peut être le hasard, mais pas les chiffres.
Pourquoi 4 lignes si kolon=5 dans votre exemple ?
Aussi, vous appelez
par exemple : quand je lance le programme , quelques fois im obtenir 1 2 4 5 6 6 . c'est mal je dois l'avoir toujours 1 2 3 4 5 6
Vous n'êtes pas à la recherche pour générer des 6 nombres aléatoires, mais plutôt un random permutation des nombres de 1 à 6. Essayez
Pourquoi 4 lignes si kolon=5 dans votre exemple ?
Aussi, vous appelez
Arrays.sort(dizi_asil[i]);
. Alors, pourquoi attendez-vous de vos tableaux de ne pas être triés???par exemple : quand je lance le programme , quelques fois im obtenir 1 2 4 5 6 6 . c'est mal je dois l'avoir toujours 1 2 3 4 5 6
Vous n'êtes pas à la recherche pour générer des 6 nombres aléatoires, mais plutôt un random permutation des nombres de 1 à 6. Essayez
Collection.shuffle
comme d'autres l'ont souligné dans leurs réponses.
OriginalL'auteur Ertuğrul Çetin | 2013-04-23
Vous devez vous connecter pour publier un commentaire.
Très simple fix - remplacer
u++;
avecu--;
.++
va faire la boucle d'arrêt,--
va faire porter sur.Si je proposerais quelque chose de plus comme ci-dessous. J'espère que c'est assez facile à comprendre.
Je voudrais aussi suggérer le Hasard de classe, qui a un
nextInt(int)
méthode, ce qui est mieux que(int) ((Math.random() * 6) + 1)
.Mais de brassage est probablement un moyen plus rapide de le faire. Soit utiliser l'API comme l'un de l'autre des réponses ou de la regarder dans les De Fisher-Yates /Knuth shuffle pour un simple algorithme de shuffle.
OriginalL'auteur Dukeling
créer une liste contenant 1 à 6. ensuite mélanger à l'aide Collection.shuffle. Ensuite, vous recevrez aléatoire numéro unique
OriginalL'auteur stinepike
C'est une façon très simple:
Alors arrêtez d'utiliser le inefficaces (et buggy) et l'utilisation de l'extrait de code que je fournis.
OriginalL'auteur jlordo
Essayer
Collections.shuffle(liste);
Ou vous pouvez le faire :
De réitérer la liste et d'obtenir une valeur unique à chaque fois.
OriginalL'auteur Achintya Jha
Une période beaucoup plus courte façon est d'utiliser shuffle comme beaucoup l'ont déjà mentionné.
si vous l'exécutez, vous obtenez quelque chose comme
OriginalL'auteur Peter Lawrey
Importations:
Réellement de la sélection:
Ce choisit un nombre aléatoire compris entre 0 et 5. Vous pouvez simplement le faire pour 1 à 6:
Ou:
OriginalL'auteur A.J. Uppal