J'ai écrit un code à l'aide de Java pour créer un numéro 4 chiffres aléatoire sans répétition de chiffres, le code que j'ai écrit est donné ci-dessous: -
Voici les cas de test (générés à partir de system.out.println (r1 + "" + r2 + "" + r3 + "" + r4); code>) sont comme suit: - P> < Pré> xxx pré>
Maintenant, ma question ici est que s'il y a un meilleur moyen de le faire. Si je pouvais l'améliorer d'une manière ou d'une autre?
p> p>
7 Réponses :
Créez une liste d'entiers de 0 à 9, mélangez-le et extrayez le premier 4.
public static void main(String[] args) { List<Integer> numbers = new ArrayList<>(); for(int i = 0; i < 10; i++){ numbers.add(i); } Collections.shuffle(numbers); String result = ""; for(int i = 0; i < 4; i++){ result += numbers.get(i).toString(); } System.out.println(result); }
Utilisez un ensemble peut-être?
Quelques approches: p>
Utilisez un ensemble pour maintenir les chiffres et continuez à ajouter des chiffres aléatoires jusqu'à ce que l'ensemble ait quatre valeurs dedans. P> li>
Créez un tableau avec des valeurs de 0 à 9. Mélangez le tableau et prenez les quatre premières valeurs. P> li> ol>
Si la performance compte, vous voudrez essayer quelques méthodes différentes et voir ce qui est plus rapide. P>
Créer une liste avec Integer de 0 à 9 (SO 10 éléments au total)
List<Integer> l = ... Collections.shuffle(l); d1 = l.get(0); d2 = l.get(1); d3 = l.get(2); d4 = l.get(3);
Voici ma solution sans utiliser de structure de données supplémentaire, en boucle pour générer un nombre aléatoire jusqu'à ce qu'il ait des chiffres uniques.
int a = 0, b = 0, c = 0, d = 0; int x = 0; while (true) { x = r.nextInt(9000) + 1000; a = x % 10; b = (x / 10) % 10; c = (x / 100) % 10; d = x / 1000; if (a == b || a == c || a == d || b == c || b == d || c == d) continue; else break; } System.out.println(x);
Voici mon approche, même s'il utilise beaucoup d'analyse de chaîne, mais aucune structure de données:
grossièrement (non testé): (après la codage de cela, j'ai compris que les opérations d'incrément doivent être faites MODULO 10.) P> P>
Je ne sais pas si ce serait la meilleure façon, mais utilisez un
Set Set = Nouveau LinkedHashSet (); code> et utilisez un
pendant que code> en boucle La taille est 4 (ou la taille que vous désirez) et à l'intérieur de la boucle, continuez à ajouter vos entiers aléatoires.
ok va essayer ça, merci
Si je pensais bien, il y a 5040 combinaisons possibles. Fabriquez une matrice avec toutes les valeurs 5040 et sélectionnez-la avec un nombre aléatoire MODULO 5040.
Générez un nombre aléatoire entre 0 et 5039. Prenez MODULO 9 pour le premier chiffre, MODULO 8 pour le second, MODULO 7 pour le 3ème, etc. Après avoir eu les numéros incrémentez les dupes de la liste.