-2
votes

Comment générer une séquence aléatoire unique de quatre nombres en java

J'ai essayé de comprendre comment écrire le code en Java qui générerait des séquences de nombres uniques comme suit: **

0012 3929 2003 2201 3994 etc ...

55562 23369 66665 77742 15489 etc ...

556612 211135 222566 333365 etc ...

avec tous les nombres possibles en séquence de quatre ou cinq blocs de nombres ou plus ...


2 commentaires

... séquence de quatre nombres ... Toutes vos séquences d'exemple ont plus de 4 nombres.


veuillez ajouter plus de description à ce que vous essayez d'accomplir


3 Réponses :


0
votes

Je pense que cela vous aidera, vous pouvez changer le code vous-même en ajoutant plus de fonctions en modifiant les boucles for avec l'entrée de l'utilisateur.

import java.util.Random;

public class RandomNum {
    public static void main(String[] args) {
        Random random = new Random();

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                System.out.print(random.nextInt(10));
            }
            System.out.print(" ");
        }
    }
}

Bonne chance!


2 commentaires

Qu'en est-il de l'unicité des séquences générées? Je veux dire que les nombres seraient répétitifs, n'est-ce pas? Par exemple, si le total de toutes les séquences possibles de 4 nombres de 1 à 9 sont générés? (1223,3019,3949,9911,1845. ..etc)


@ AndriusMickevičius, vous pouvez vérifier si les blocs de nombres sont uniques en les ajoutant à un tableau d'entiers. Ensuite, vous pouvez comparer chaque bloc de nombres en comparant chaque élément à l'intérieur du tableau dans une autre boucle for. En imprimant le booléen de l'unicité, vous obtiendrez soit vrai soit faux.



1
votes

Essayer d'analyser votre question ici: Étant donné l'entrée «4», vous voulez générer tous les nombres possibles entre 0000 et 9999 (donc, 10000 nombres), dans un ordre aléatoire?

Une option consiste à créer d'abord TOUS les numéros d'une collection, puis à la mélanger:

var list = IntStream.of(0, 10000)
  .mapToObj(n -> String.format("%04d", n))
  .collect(Collectors.toList());
Collections.shuffle(list);

Ou si le nombre le plus bas est 1000, eh bien, changez ce 0 en 1000, cela fonctionne tout aussi bien.

Vous pouvez le faire pour n'importe quelle entrée, mais une fois que vous arrivez à environ 8, cela commence à devenir difficile à manier; cela prend beaucoup de mémoire.

Il existe des moyens de le faire, mais cela devient assez compliqué; probablement ce qui précède est assez bon pour vous.


0 commentaires

0
votes

Ma solution serait de voir la séquence comme une chaîne car il est possible qu'elle ne rentre pas dans un int ou long.

public static void main(String[] args) {
    System.out.println(randomNumbersInNBlocks(4,4));
    System.out.println(randomNumbersInNBlocks(4,6));
    System.out.println(randomNumbersInNBlocks(6,4));
    System.out.println(randomNumbersInNBlocks(6,6));
}

private static String randomNumbersInNBlocks(int numbersInBlock, int blockCount){
    final String ALPHA_NUMERIC_STRING = "0123456789";
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < blockCount; i++) {
        String numbers;
        do{
            numbers = getRandomNumbers(numbersInBlock);
        }while (builder.toString().contains(numbers));
        builder.append(numbers);
        builder.append(" ");
    }

    return builder.deleteCharAt(builder.length() -1).toString();
}

private static String getRandomNumbers(int numberCount){
    final String ALPHA_NUMERIC_STRING = "0123456789";
    StringBuilder builder = new StringBuilder();
    while (numberCount-- != 0) {
        int character = (int)(Math.random()*ALPHA_NUMERIC_STRING.length());
        builder.append(ALPHA_NUMERIC_STRING.charAt(character));
    }
    return builder.toString();
}


3 commentaires

Produirait-il tous les 10000 nombres pour la séquence de 4 nombres? Si je l'exécute comme ceci: System.out.println (randomNumbersInNBlocks (4,10000));


Une autre question est, comment puis-je implémenter la méthode randomNumbersInNBlocks (a, b) dans la boucle for afin qu'elle charge toutes les valeurs possibles (b) dans Array ou produire des blocs (b) un par un au lieu de vrac


@ AndriusMickevičius Le getRandomNumbers (int numberCount) génère un bloc de taille numberCount.