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

Java Discussion :

Toutes les combinaison possibles entre les termes


Sujet :

Java

  1. #1
    Membre confirmé
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 58
    Par défaut Toutes les combinaison possibles entre les termes
    Bonjour,
    je suis vraiment bloquée je n'ai pas une idée même pour développer

    le fichier d'entrée est le suivant:
    those , the
    accidents , connection
    petroleum , tankers
    je veux faire toutes les combinaisons possibles entres les termes pour avoir ce résultat:
    those - accidents - petroleum
    those - accidents - tankers
    those - connection - petroleum
    those - connection - tankers
    the - accidents - petroleum
    the - accidents - tankers
    the - connection - petroleum
    the - connection - tankers
    Merci de m'aider par un bout de code ou par une simple idée

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    À mon avis, le plus simple est un raisonnement par récurrence.

    Définir une méthode qui prend, en paramètres :
    - une liste de mots qu'on a choisis d'utiliser, venant des premières lignes
    - la liste des mots restants, avec toutes les possibilités des lignes restantes.

    Et qui a pour effet : d'écrire toutes les combinaisons composées, d'abord des mots qu'on a choisis d'utiliser, puis du reste de la liste de mots.

    Elle fera donc comme ça : dans la liste des mots restants, elle prend la première ligne. Elle enlève cette première ligne des lignes restantes.
    Puis elle fait une boucle sur toutes les possibilités de cette ligne. Dans chaque boucle, elle s'appelle elle-même, avec comme mots choisis, les mots qui étaient déjà choisis, plus la possibilité correspondant à cette boucle, et comme liste de mots restants, ce qui reste.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut
    C'est probablement plus simple dit 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
    BufferedReader lecteur = new BufferedReader(new FileReader("fichier d'entrée"));
    Vector<String[]> lignes = new Vector<String[]>();
    String valeur;
    while (lecteur.ready()) lignes.add(lecteur.readLine().split(","));
    lecteur.close();
    lignes.trimToSize();
    for (int i = 0 ; i < lignes.get(0).length ; i++) {
        for (int j = 0 ; j < lignes.get(1).length ; j++) {
            for (int k = 0 ; k < lignes.get(2).length ; k++) {
                System.out.println(lignes.get(0)[i].trim() + " " + lignes.get(1)[j].trim() + " " + lignes.get(2)[k].trim());
                }
            }
        }
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  4. #4
    Membre confirmé
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 58
    Par défaut
    mercii

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Forcément, si on connaît le nombre de lignes du fichier d'entrée la solution est plus simple -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut
    Effectivement, connaissant le nombre de lignes, c'est très simple. Et je vous avoues qu'avec un nombre de lignes inconnu, et un nombre de termes inconnu par lignes, je serai totalement incapable de trouver une solution. C'est d'ailleurs votre explication, thelvin, qui m'a inspiré et permis de pondre ce petit bout de code QUI NE FONCTIONNE QUE DANS CE CAS !!!
    Par contre, si vous pouviez nous montrer un code générique équivalent, je suis preneur...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  7. #7
    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
    Salut,

    Citation Envoyé par yotta Voir le message
    Par contre, si vous pouviez nous montrer un code générique équivalent, je suis preneur...
    Il suffit que tu généralises ta solution en utilisant une pile pour simuler les boucles. Voilà une solution qui fonctionne quelque soit le nombre de lignes, et le nombre de mots par ligne.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    public class Combinaisons {
     
        public static void main(String[] args) {
     
            String[] input = {        
            "those , the",
            "accidents , connection",
            "petroleum , tankers", 
            };
     
            List<List<String>> liste = new ArrayList<>();
     
            for(String ligne : input) {
                liste.add( Arrays.asList(ligne.split("\\s*,\\s*")) );
            }
     
            List<String> combinaisons = createCombinaisons(liste);
     
            for(String combinaison : combinaisons) {
                System.out.println(combinaison);
            }
     
        }
     
     
        public static List<String> createCombinaisons(List<List<String>> liste) {
            List<String> combinaisons = new ArrayList<>();
            createCombinaisons(liste, combinaisons, new Stack<Integer>(), new StringBuilder());
            return combinaisons;
        }
     
     
        private static void createCombinaisons(List<List<String>> liste,
                List<String> combinaisons, Stack<Integer> indexList,
                StringBuilder stringBuilder) {
     
            // la taille courante de la pile correspond au niveau de boucle imbriquée courant
            if ( indexList.size()<liste.size() ) {
                List<String> ligne = liste.get(indexList.size());
     
                // on stocke l'itération sur la ligne courante en utilisant une pile, ce qui permet
                // de simuler n boucles imbriquées
                for(int i=0; i<ligne.size(); i++) {
     
                    indexList.push(i);
     
                    createCombinaisons(liste, combinaisons, indexList, stringBuilder);
     
                    indexList.pop();
     
                }
     
     
            }
            else {
     
                // combinaison des indices de boucle, correspondant à la dernière boucle imbriquée
                for(int i=0; i<indexList.size(); i++) {
     
                    // boucle imbriquée de niveau i
     
                    if ( i>0 ) {
                        stringBuilder.append(" - ");
                    }
                    List<String> ligne = liste.get(i); // liste de mot de niveau i 
                    int indexMot = indexList.get(i); // valeur actuelle de l'indice de la boucle de niveau i
                    String mot = ligne.get(indexMot); // mot correspondant
                    stringBuilder.append(mot);
     
                }
                combinaisons.add(stringBuilder.toString()); // on stocke la combinaison trouvée
                stringBuilder.setLength(0); // on recycle le StringBuilder
     
            }
     
        }
     
    }
    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.

  8. #8
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut
    Merci beaucoup !
    On en apprend tous les jours...
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/04/2015, 13h00
  2. [C#] Effectuer toutes les combinaisons possibles entre (n) entiers
    Par unix27 dans le forum Débuter
    Réponses: 11
    Dernier message: 05/11/2014, 16h04
  3. Réponses: 4
    Dernier message: 12/08/2014, 14h07
  4. Stocker dans un tableau toutes les combinaisons possibles entre plusieurs tableaux.
    Par gui-yem dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 19/03/2014, 15h22
  5. toutes les combinaisons possibles
    Par marocleverness dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 29/05/2006, 00h11

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