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.