IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

les combinaisons d'un tableau de caractère


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Par défaut les combinaisons d'un tableau de caractère
    Bonjour,

    j'ai un tableau de char 'GPXFILES1' qui contient les caractère suivant: A,C,D,T,W
    je veux crée un programme qui m'affiche tout les combinaison possible de 3 caractère sans répétition , dans cette exemple il faut m'affiche
    ACD
    ACT
    ACW
    ADT
    ADW
    ATW
    CDT
    CDW
    CTW
    DTW

    j'ai essaye avec ce code mais il n'affiche pas un bon résultat :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (int j = 0, x = 1, y = 1; j < GPXFILES1.length; j++, x++, y++) {
    for (int i = x; i < GPXFILES1.length; i++) {
    y++;
    for (int h = y; h < GPXFILES1.length; h++) {
    stg1 = GPXFILES1[j] + "" + GPXFILES1[i] + "" + GPXFILES1[h];
    System.out.println(stg1);
    }
    if (y == GPXFILES1.length) y = 1;
    }

  2. #2
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Tu peux faire ça en utilisant un objet qui t'assure l'unicité des éléments dans ton tableau, et une technique de force brute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            char[] GPXFILES1 = {'A','C','D','T','W'};
     
            HashSet<String> stringSet = new HashSet<String>();
            int i = 0;
            int levelMax = 3;
            for (char currentChar1 : GPXFILES1) {
                for (char currentChar2 : GPXFILES1) {
                    for (char currentChar3 : GPXFILES1) {
                        if (currentChar1 != currentChar2 && currentChar2 != currentChar3 && currentChar1 != currentChar3){
                            stringSet.add("" + currentChar1 + currentChar2 + currentChar3);
                        }
                    }
                }
            }
     
            for(String result : stringSet){
                System.out.println(result);
            }
    Sinon, tu peux aussi le faire en récursif si tu veux pouvoir paramétrer le nombre de boucles

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 93
    Par défaut
    merci eulbobo pour votre réponse,

    mais dans votre solution il y'a répétition des caractères :/
    par exemple :
    DWT
    WTD
    WDT

  4. #4
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Ha ok, donc il faut la liste non ordonnée et unique des triplets de données à partir des cinq éléments de base?

    du coup un truc de type bruteforce comme ça peut faire l'affaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    char[] GPXFILES1 = {'A', 'C', 'D', 'T', 'W'};
     
            Set<Set<Character>> combinaison = new HashSet<Set<Character>>(); // contient la liste des combinaisons
            for (char currentChar1 : GPXFILES1) {
                Set<Character> charSet = new HashSet<Character>();
                charSet.add(currentChar1); // on ajoute le premier caractère à la combinaison
                for (char currentChar2 : GPXFILES1) {
                    if (charSet.add(currentChar2)) { // si on a pas le caractère dans notre liste, deuxième caractère dans la combinaison
                        for (char currentChar3 : GPXFILES1) {
                            if (charSet.add(currentChar3)) {  // si on a pas le caractère dans notre liste, troisième caractère dans la combinaison
                                if (!combinaison.contains(charSet)){ // si on a pas la combinaison dans le résultat
                                    Set<Character> foundSet = new HashSet<Character>();// stockage de la combinaison dans un autre set
                                    foundSet.addAll(charSet);
                                    combinaison.add(foundSet);
                                }
                                charSet.remove(currentChar3);
                            }
                        }
                        charSet.remove(currentChar2);
                    }
                }
                charSet.remove(currentChar1);
            }
     
     
            for (Set<Character> comb : combinaison) { // parcours et affichage des combinaisons trouvées
                for (Character chr : comb){
                    System.out.print(chr);
                }
                System.out.println();
            }

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ou comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    final char[] GPXFILES1 = {'A', 'C', 'D', 'T', 'W'};
     
    final char[] array = new char[3];
     
    final List<String> list = new ArrayList<>();
    for(int i=0; i<GPXFILES1.length; i++) {
       for(int j=i+1; j<GPXFILES1.length; j++) {
     
          int index=0;
          for(int k=0; k<GPXFILES1.length; k++) {
               if ( k!=i && k!=j ) {
                    array[index++]=GPXFILES1[k];
               }
          }
          list.add(new String(array));
     
        }
    }
     
    ist.forEach(item-> System.out.println(item));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment trouver les combinaisons possibles d'un tableau ?
    Par Jean-Marc.Bourguet dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 15h37
  2. [XL-2003] Découper des chaînes de caractère d'un fichier et les stocker dans un tableau
    Par -Naek- dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/04/2009, 18h24
  3. Réponses: 2
    Dernier message: 11/02/2007, 17h13
  4. trouver les combinaisons possibles d'un tableau ?
    Par titoumimi dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 20/09/2006, 20h29
  5. Sortir d'un tableau les combinaisons possibles
    Par juelo dans le forum Algorithmes et structures de données
    Réponses: 33
    Dernier message: 26/03/2006, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo