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

Entrée/Sortie Java Discussion :

Enregistrement d'un tableau dans un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 41
    Points
    41
    Par défaut Enregistrement d'un tableau dans un fichier
    Bonjour,

    Pour un exercice, j'ai un programme simple à faire et qui doit fonctionner en plusieurs étapes que voici :

    1. Choisir 2 paramètres x et y qui contiendront des lettres différentes et maximum 1 lettre par paramètre
    2. Prendre 10 mots (1 phrase en String) dans un fichier texte
    3. Décomposer le String en tableau de char
    4. Trouver les espaces et ainsi séparer la phrase en une liste de mots
    5. Si les mots contiennent une des 2 lettres choisies, on les refuse sinon on les met dans un autre tableau de produit valider.
    6. On remet le tableau de produit validé dans un nouveau fichier.

    Mes méthodes fonctionnent à part en ce qui concerne l'écriture dans un fichier, avec les paramètre x,y,, découper les mots,..

    Voici mon code
    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Arrays;
    import java.util.Scanner;
     
    public class Methode3 {
     
        /**
         * Testes deux String pour vérifier qu'elles sont de taille 1 et que leur unique caractère est différent.
         * @param x la première chaîne à tester
         * @param y la deuxième chaîne à tester
         * @return true si toutes les conditions sont vérifiées, false sinon
         */
     
        public static boolean DiffChar(String x, String y) 
        {
        boolean bon = false;
        if (x.length() == 1 && y.length() == 1 && x.charAt(0) != y.charAt(0) && x!=null && y!=null) bon = true;
        return(bon);
        }
     
        /**
         * Testes un mot et vérifie si il contient le caractere des variable x et y. Auquel cas il renvoit false.
         * @param produit contient une chaine de caractère, ex: [la vache rit]
         * @param x est initialisé de une lettre avec une lettre differente de char y
         * @param y est initialisé de une lettre avec une lettre differente de char x
         * @return true si tout les caracteres sont vérifiées et accepter, false sinon
         */
        public static boolean valider(String produit, char x, char y){
            boolean resultat = true;
            int i = 0;
            while (i < produit.length() && resultat == true){
                if (produit.charAt(i) == x || produit.charAt(i) == y){
                    resultat = false;
                }
                else i++;
            }
            return resultat;
        }
     
        /**
         * Trie par ordre lexicographique un tableau de string
         * @param s le tableau de string des caractere
         * @param tab le tableau vide qui se remplira de mot à chaque passage
         * @param i compteur qui commence initialisé a 0 et incrémente de +1 à chaque passage
         * @return un tableau triée par ordre lexicographique
         */
        public static void inserer(String s, String[] tab, int i){
            System.out.println(i+java.util.Arrays.toString(tab));
            if (i < tab.length){
                tab[i] = s;
                if (i >= 1) Arrays.sort(tab);
            }
        }
     
        /**
         * vérifie si les produit sont valide et les trie si valide dans un autre tableau ou il seront triées par ordre lexicographique
         * @param tab est un tableau de string vide de taille 10
         * @param car_mot contient un string décomposé en tableau de char
         * @param i est initialisé à 0
         * @param x est déjà initialisé
         * @param y est déjà initialisé
         * @return un tableau de mot validé dans l'ordre lexicographique
         */
        public static void extraireMots(String[] tab,char[] car_mot, int i, char x ,char y)
        {
            String temp = "";
            String[] tabTemp = new String[10];
            int cpt;
            int k = 0;
            for (cpt = 0 ; cpt < car_mot.length; cpt++ ){ // permet de parcourir le tableau et raligner les mot dans un string à la suite de l'autre
                if (car_mot[cpt] == ' '){ //si on arrive a un espace en entre
                    if (!temp.equals("")){ // pour ne pas enregistrer des espaces qui se suivent
                        tabTemp[k] = temp; //arriver un un espace il s'agit d'un mot complet que l'on entre dans un string
                        k++;
                    }
                    temp = ""; //on vide le temp
     
                }
                else{
                    temp = temp + car_mot[cpt]; //tant que on n'atteint pas un espace on continue d'écrire le mot
                }
     
                tabTemp[k] = temp;
            }
            System.out.println(java.util.Arrays.toString(car_mot));
            System.out.println(java.util.Arrays.toString(tabTemp));
            System.out.println(""+tab.length);
            System.out.println(java.util.Arrays.toString(tab));
            i=0;
            for(int l = 0; l < tab.length ; l++){ // 0<10 (nb de mot autoriser)
                if(valider(tabTemp[l],x, y)){ //si la méthode valider renvoie true;
                    inserer(tabTemp[l],tab,i); //si true inserer dans un tableau par ordre lexicographique
                    i++;
                }
            }    
        }
     
        /**
         * méthode d'écriture dans un fichier
         * @param course contient la liste de cource séparer par des espaces entre les mots
         * @param tab est un tableau de string rempli et trié
         * @param y 
         * @param x 
         * @param i 
         * @param achat 
         * @return un tableau de mot validé dans l'ordre lexicographique est écrit dans un fichier texte
         */
        public static void ecrire (String course, String tab[], char[] achat, int i, char x, char y) throws FileNotFoundException  {
            extraireMots(tab,achat,0,x,y);
            PrintWriter outputFile = new PrintWriter("liste_de_course.txt");    
            for (int cpt=0; cpt<tab.length; cpt++)
            {
                outputFile.println(tab[cpt]);
            }
            outputFile.close();
        }
     
        /**
         * permet de lire une liste de produit dans un fichier
         * @param max est initialisé au nombre maximum que l'on peut entrer
         * @param x est déjà initialisé
         * @param y est déjà initialisé
         * @return lit dans un fichier une liste de course
         */
        public static String[] lire (char x , char y ,int max)throws IOException{
     
            File file = new File("nom.txt"); 
            Scanner inputFile = new Scanner(file);
            String tab[] = new String [max];
            int cpt=0;
            while (inputFile.hasNext()) //permet d'aller jusque à la fin du fichier
            {
                String mot = inputFile.nextLine();
                System.out.println(mot);
                tab[cpt]=mot;
                cpt++;
            }
            inputFile.close();
            return (tab);
        }
     
        public static void main(String[] args) throws IOException {
     
     
            System.out.println("Entrer vos paramètres (1 lettre par paramètre) ");
            boolean bon = false;
            String xx;
            String yy;
     
            Scanner clavier = new Scanner(System.in);
            do {
                System.out.println("Entrez x: ");
                xx = clavier.nextLine(); //enregistre x
                System.out.println("Entrez y: ");
                yy = clavier.nextLine(); //enregistre y
     
                bon = DiffChar(xx,yy);
                xx = xx.toLowerCase();  //j'accepte que l'on me rentre les lettres x et y en maj
                yy = yy.toLowerCase();  //mais je les retransformes en min
            } while (bon == false); //dans cette boucle entrer x et y temps que il ne sont pas bon
     
            char x = xx.charAt(0);
            char y = yy.charAt(0);
     
     
            System.out.println("Bienvenue au marché de Pad"+x+"pad"+y);    
            System.out.println("Entrez vos course, 10 achats maximum");
     
            String[] courses = lire(x,y,10); //clavier.nextLine();
            String course = Arrays.asList(courses).toString(); 
            //je suis obliger d'utiliser un tableau de string pour la lecture mais je le retransforme en string
            char[] achat = course.toCharArray();
            String listeMot[] = new String[10];
     
            System.out.println("On ecris dans un fichier texte les produit valide");    
            ecrire (course,listeMot,achat,0,x,y);
            //extraireMots(course,achat,0,x,y);
            System.out.println(java.util.Arrays.toString(listeMot));
        }
    }
    Quelqu'un saurait-il m'indiquer comment corriger mon programme ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Tu tente d'en faire trop en même temps.
    Décompose le problème en sous problème, comme l'énoncer le fait.
    Ne commence pas un point dans ta liste si tu n'a pas finit le point précédent.
    On ne commence pas un problème si on a pas déjà les pièces pour le résoudre. Il faut d'abord, réunir les pièces (faire les points précédent avant).
    1. Choisir 2 paramètres x et y qui contiendront des lettres différentes et maximum 1 lettre par paramètre
      Première méthode : ok
      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
      System.out.println("Entrer vos paramètres (1 lettre par paramètre) ");
              boolean bon = false;
              String xx;
              String yy;
       
              Scanner clavier = new Scanner(System.in);
              do {
                  System.out.println("Entrez x: ");
                  xx = clavier.nextLine(); //enregistre x
                  System.out.println("Entrez y: ");
                  yy = clavier.nextLine(); //enregistre y
       
                  bon = DiffChar(xx,yy);
                  xx = xx.toLowerCase();  //j'accepte que l'on me rentre les lettres x et y en maj
                  yy = yy.toLowerCase();  //mais je les retransformes en min
              } while (bon == false); //dans cette boucle entrer x et y temps que il ne sont pas bon
       
              char x = xx.charAt(0);
              char y = yy.charAt(0);
    2. Prendre 10 mots (1 phrase en String) dans un fichier texte
      Seconde méthode : not ok
      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
      /**
           * permet de lire une liste de produit dans un fichier
           * @param max est initialisé au nombre maximum que l'on peut entrer
           * @param x est déjà initialisé
           * @param y est déjà initialisé
           * @return lit dans un fichier une liste de course
           */
          public static String[] lire (char x , char y ,int max)throws IOException{
       
              File file = new File("nom.txt"); 
              Scanner inputFile = new Scanner(file);
              String tab[] = new String [max];
              int cpt=0;
              while (inputFile.hasNext()) //permet d'aller jusque à la fin du fichier
              {
                  String mot = inputFile.nextLine();
                  System.out.println(mot);
                  tab[cpt]=mot;
                  cpt++;
              }
              inputFile.close();
              return (tab);
          }
      Certains variables sont mal nommé, "nom" à la place de ligne...
      Proposition :
      On s'occupe d'avoir un string avec l'ensemble des mots.
      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
      /**
           * Permet de lire une liste de produit dans un fichier
           */
          public static String lire ()throws IOException{
          	StringBuilder sb = new StringBuilder();
              File file = new File("nom.txt"); 
              Scanner inputFile = new Scanner(file);
              while (inputFile.hasNext()) //permet d'aller jusque à la fin du fichier
              {
                  String ligne = inputFile.nextLine();
                  System.out.println(ligne);
                  sb.append(ligne+" ");// Espace pour séparé les mots entre les lignes
              }
              inputFile.close();
              return sb.toString();
          }
      Puis, on s'occupe d'avoir seulement 10 mots.(identifier les mots)
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      public static List<String> dechiffre(String text, int maximun){
          	String[] mots = text.split(" ");
          	List<String> toReturn = new ArrayList<String>();
          	for (String mot : mots) {
      			if(toReturn.size() >= maximun){
      				// Si on atteinds la limite on sort de la boucle
      				break;
      			}
      			toReturn.add(mot);
      		}
          	return toReturn;
          }
    3. Décomposer le String en tableau de char
    4. Trouver les espaces et ainsi séparer la phrase en une liste de mots
      Oups, utiliser la fonction regex pour faire cela.
    5. Si les mots contiennent une des 2 lettres choisies, on les refuse sinon on les met dans un autre tableau de produit valider.
      Au une nouvelle contrainte pour l'ajout de mot :
      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
      public static List<String> dechiffre(String text, int maximun, char x,
      			char y) {
      		String[] mots = text.split(" ");
      		List<String> toReturn = new ArrayList<String>();
      		for (String mot : mots) {
      			if (toReturn.size() >= maximun) {
      				// Si on atteinds la limite on sort de la boucle
      				break;
      			}
      			if (!mot.contains(Character.toString(x))
      					&& !mot.contains(Character.toString(y))) {
      				toReturn.add(mot);
      			}
      		}
      		return toReturn;
      	}
    6. On remet le tableau de produit validé dans un nouveau fichier.


    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. Enregistrer le contenu d'un tableau dans un fichier
    Par solicel dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 16/11/2009, 16h50
  2. Réponses: 4
    Dernier message: 10/04/2008, 17h54
  3. enregistrer un tableau dans un fichier texte
    Par petitours dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/11/2006, 14h10
  4. Réponses: 4
    Dernier message: 12/10/2005, 21h22
  5. Réponses: 10
    Dernier message: 16/12/2004, 15h23

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