8
votes

Création d'un numéro aléatoire à 4 chiffres à l'aide de Java sans répétition dans les chiffres

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: -
XXX


Voici les cas de test (générés à partir de system.out.println (r1 + "" + r2 + "" + r3 + "" + r4); ) sont comme suit: - < Pré> xxx


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?


4 commentaires

Je ne sais pas si ce serait la meilleure façon, mais utilisez un Set Set = Nouveau LinkedHashSet (); et utilisez un pendant que 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.


7 Réponses :


18
votes

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);
}


0 commentaires

2
votes

Utilisez un ensemble peut-être? XXX


0 commentaires

5
votes

Quelques approches:

  1. Utilisez un ensemble pour maintenir les chiffres et continuez à ajouter des chiffres aléatoires jusqu'à ce que l'ensemble ait quatre valeurs dedans.

  2. Créez un tableau avec des valeurs de 0 à 9. Mélangez le tableau et prenez les quatre premières valeurs.

    Si la performance compte, vous voudrez essayer quelques méthodes différentes et voir ce qui est plus rapide.


0 commentaires

1
votes

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);


0 commentaires

1
votes

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);


0 commentaires

4
votes

Voici mon approche, même s'il utilise beaucoup d'analyse de chaîne, mais aucune structure de données: xxx


0 commentaires

1
votes

grossièrement (non testé): xxx

(après la codage de cela, j'ai compris que les opérations d'incrément doivent être faites MODULO 10.)


0 commentaires