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 :

Afficher les couples de mots


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Afficher les couples de mots
    Bonjour,
    je veux faire la combinaisons deux à deux entre les mots qui ne sont pas dans la même ligne :
    le ficher d'entré sera de cette manière:
    a,an,
    letter,
    trap,bomb,
    le résultat désirée sera:
    a,letter
    a,trap
    a,bomb
    an,letter
    an,trap
    an,bomb
    letter,trap
    letter,bomb
    j'ai essayé d'exploiter les méthodes récursives mais j'ai pas réussie de les bien utliser
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    package CoupleOccurrence;
     
    import java.io.*;
    import java.util.Vector;
     
    public class CoupleCombAutresMethode {
     
    	static String chaine="";
    	static Vector<Tableaux> liste =new Vector<Tableaux>();
     
    	public static void main(String[] args){
     
    		final File folder = new File("C:\\Users\\HP\\Desktop\\Mots-Simples\\CouplesCombinaisons\\test_in");
    		File[] listOfFiles = folder.listFiles();
    		for (int i = 0; i < listOfFiles.length; i++) {
    			    File fileEntry = listOfFiles[i];
    			    System.out.println("***"+fileEntry);
    			    String name = fileEntry.toString();
    	 			  while(name.toString().contains("\\")){
    	 				  name = name.substring(name.indexOf("\\")+1, name.length());
    	 			  }
    	 		   String nomFichier = "C:\\Users\\HP\\Desktop\\Mots-Simples\\CouplesCombinaisons\\test_out\\"+name;
    		lecture(fileEntry,liste); 
    		boucle(nomFichier,0);
    		}
     
     
    	}
     
     
    	public static void lecture (File fichier,Vector<Tableaux>liste){
    		String chaine="";
    		Tableaux t;
    		try{
     
    		 	InputStream ips=new FileInputStream(fichier); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			liste.clear();
    			while ((ligne=br.readLine())!=null ){
    			//	System.out.println(ligne);
    				//chaine+=ligne+"\n";
    				t=new Tableaux();
    				t.mots=ligne.split(",");
    				//System.out.println(t.mots.length);
    				liste.add(t);
     
    			}
     
    			System.out.println("*************************");		
    			br.close(); 
     
    		}		
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
     
     
      }
     
    	public static void boucle(String out, int i){
    		try{
    			OutputStream ips=new FileOutputStream(out,true); 
    			OutputStreamWriter ipsr=new OutputStreamWriter(ips);
    			BufferedWriter fp=new BufferedWriter(ipsr);
    		//fp.flush();	
    		if(i==liste.size()){
     
    			//System.out.println("**"+chaine);
    			//fp.append(chaine);
    			//fp.append("\n");
     
    		}
    		else{
    			for(int j=0;j<liste.get(i).mots.length;j++){
     
    				System.out.println(	chaine=chaine+liste.get(i).mots[j]+",");
    				//chaine=chaine+liste.get(i).mots[j]+",";
    				boucle(out,i+1);
    				//System.out.println(	chaine=chaine.substring(0,chaine.length()-liste.get(i).mots[j].length()-1));
    			  chaine=chaine.substring(0,chaine.length()-liste.get(i).mots[j].length()-1);
    			  boucle(out,i+1);
     
     
    			}
     
    		}
     
    		//fp.close();
     
    		}
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    	}
     
    }
    le résultat de mon code affiche:
    a,
    a,letter,
    a,letter,trap,
    a,letter,bomb,
    a,trap,
    a,bomb,
    letter,
    letter,trap,
    letter,bomb,
    trap,
    bomb,
    an,
    an,letter,
    an,letter,trap,
    an,letter,bomb,
    an,trap,
    an,bomb,
    letter,
    letter,trap,
    letter,bomb,
    trap,
    bomb,
    j'arrive pas à corriger la bêtise que j'ai fait
    est-ce que l'idée est faute et je doit refaire le code??

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Par défaut
    Si j'ai bien compris, tu voudrais que à chaque mot soit associé les préfixes a et an puis la seconde ligne soit assignée en préfixe aux mots de la 3éme.

    Tes valeurs resterons les mêmes ou elles peuvent varier? (a sera toujours a, an toujours an, etc...)

    Il me semble que tu lis un fichier; pourquoi ne pas utiliser un BufferedReader? Il est très pratique pour dissocier les lignes!
    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
    		File file = new File("test_in");
        	FileReader fr;
    		FileWriter fw;
    		String str;
    		try {
    			fr = new FileReader(file.getAbsoluteFile());
    			BufferedReader bw = new BufferedReader(fr);	
    			str = bw.readLine(); //Chaque fois que tu invoquera cette méthode, ton BufferedReader lira la ligne, puis passera en stand-by avant la prochaine ligne
    								//En gros, cette commande permet de lire une unique ligne.
    			/**Met tes instructions ici pour cette ligne**/
    			str = bw.readLine(); //On lit la 2ème ligne
    			/**Met tes instructions ici pour cette ligne**/
    			//...
    		} catch (FileNotFoundException e1) {
    			e1.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    Tu peux peut-être alors mettre une ligne pour chaque mot/préfixe. Chaque ligne aura alors un identifiant (une variable String tout simplement) et tu n'aura plus qu'a faire une addition!

  3. #3
    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
    Citation Envoyé par JeremGamer Voir le message
    Tes valeurs resterons les mêmes ou elles peuvent varier? (a sera toujours a, an toujours an, etc...)
    Les ligne sont variables et les éléments dans chaque ligne aussi sont variables, peuvent être d'autres mots différentes.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    l'utilisant de MultiMap (du style Map<String,LinkedList<String>>) te simplifierait beaucoup le problème et le code.

  5. #5
    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
    Citation Envoyé par plawyx Voir le message
    l'utilisant de MultiMap (du style Map<String,LinkedList<String>>) te simplifierait beaucoup le problème et le code.
    j'ai pas bien compris: est-ce je remplace l'utilisation de tableaux ou juste dans le parcourt ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Citation Envoyé par Wim88 Voir le message
    j'ai pas bien compris: est-ce je remplace l'utilisation de tableaux ou juste dans le parcourt ?
    Tes données seront triées et stockées dans la Multimap. D'après tes données, les clés des Multimap seront:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a
    an
    letter
    trap
    bomb
    et la LinkedList correspondant à une clé donnée, stockera les mots sélectionnés. Pour les données suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a,letter
    a,trap
    a,bomb
    cela donnera:

    dans la LinkedList correspondant à la clé


  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Citation Envoyé par Wim88 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a,an,
    letter,
    trap,bomb,
    affichage


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    a,letter
    a,trap
    a,bomb
    an,letter
    an,trap
    an,bomb
    letter,trap
    letter,bomb
    Donc tous les mots différents (pas d'info sur le traitement des doublons) peuvent devenir une clé d'une Map. Ensuite, reste à trier avec les numéros de 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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.LinkedHashMap;
    import java.util.LinkedList;
    import java.util.Map;
    import java.util.Map.Entry;
     
    public class Arrangement {
     
    	public static void main(String[] args) {
     
    		final File inFich = new File("liste.txt");
     
    		Map<String, LinkedList<String>> multiResMap = new LinkedHashMap<>();
     
    		listeFichier(inFich);  // juste pour l'affichage des données
     
    		multiResMap = transFichier(inFich);
     
    		for (String cle :   multiResMap.keySet()){
     
    			for (String l : multiResMap.get(cle)){
     
    				System.out.printf("ResMap \t cle : %s \t valeur associée : %s\n",cle,l);
    			}
    		}
     
    	}
     
    	private static Map<String,LinkedList<String>> transFichier(final File inFich){
     
    		Map<String, Integer> cleNumeroLigne = new LinkedHashMap<>();  //stocke la clé et son numéro de ligne
     
    		try(InputStream is = new FileInputStream(inFich);InputStreamReader ipsr = new InputStreamReader(is);BufferedReader br = new BufferedReader(ipsr)){
     
    			String ligne;
    			String[] tabCles;
     
    			int nbLigne = 0;
     
    			while ( (ligne = br.readLine()) != null ){
     
    				++nbLigne;
     
    				tabCles = ligne.split(",");
     
    				for (int i = 0, n = tabCles.length; i< n; ++i){
     
    					if (!cleNumeroLigne.containsKey(tabCles[i])){  //Comment traiter les doublons ? (pas d'infos)
     
    						cleNumeroLigne.put(tabCles[i],nbLigne);
    					}
    				}
    			}
     
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		return transMultiMap(cleNumeroLigne);	
    	}
     
     
    	private static Map<String,LinkedList<String>> transMultiMap(final Map<String,Integer> map){
     
    		Map<String,LinkedList<String>> mapRes = new LinkedHashMap<>();
    		LinkedList<String> tempo;
     
    		for (Entry<String, Integer> cle :  map.entrySet()){
     
    			tempo = new LinkedList<>();
     
    			for (Entry<String, Integer> clebis :  map.entrySet()){
     
    				if (!mapRes.containsKey(clebis.getKey()) & (cle.getValue()) != (clebis.getValue())){
     
    					tempo.add(clebis.getKey());
    				}
    			}
    			mapRes.put(cle.getKey(), tempo);
    		}
    		return mapRes;
    	}
     
     
    	private static void listeFichier(final File inFich){
     
    		try(InputStream is = new FileInputStream(inFich);InputStreamReader ipsr = new InputStreamReader(is);BufferedReader br = new BufferedReader(ipsr)){
     
    			String ligne;
     
    			while ( (ligne = br.readLine()) != null ){
     
    				System.out.printf("%s\n",ligne);
    			}
     
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
    	}
    }
    donne le résultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    a,an,
    letter,
    trap,bomb,
    ResMap 	 cle : a 	 val : letter
    ResMap 	 cle : a 	 val : trap
    ResMap 	 cle : a 	 val : bomb
    ResMap 	 cle : an 	 val : letter
    ResMap 	 cle : an 	 val : trap
    ResMap 	 cle : an 	 val : bomb
    ResMap 	 cle : letter 	 val : trap
    ResMap 	 cle : letter 	 val : bomb

Discussions similaires

  1. [XL-2007] Afficher les mots répétés dans un colonne
    Par a.elbaki dans le forum Excel
    Réponses: 2
    Dernier message: 29/03/2011, 11h50
  2. Afficher les mots d'un TextField sur un Panel
    Par monkeygoo dans le forum Débuter
    Réponses: 1
    Dernier message: 12/03/2011, 21h36
  3. comment afficher les 2 premiers mots d'un champ?
    Par Mydriaze dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/08/2010, 14h19
  4. [MySQL] Afficher les N premiers mots
    Par onirisme dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/09/2007, 17h48
  5. [MySQL] Afficher les entrées d'une table qui contient un mot précis
    Par anarchoi dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 02/05/2007, 21h15

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