Partage
  • Partager sur Facebook
  • Partager sur Twitter

Correction de l'exo Java du mois d'avril

La solution est là.

    1 mai 2011 à 18:06:00

    Bonjour à tous, le délai pour l'exercice du mois d'avril est à présent terminé, laissez-moi vous présenter la correction de celui-ci. Cette correction n'est pas parfaite, elle s'adresse surtout au niveau débutant et comme vous le constaterez l'exercice était aussi facile que prévu (pas plus d'une heure si vous connaissez déjà le langage). Sans plus tarder, voici la solution.

    Pour rappel, l'exercice se trouve ici.

    Question 1



    package exoavril;
    
    import java.util.Scanner;
    
    /**
     *
     * @author willard
     */
    public class Echo {
       
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            System.out.println("Bienvenue, veuillez saisir un texte");
            String line = null;
            Scanner sc = new Scanner(System.in);
            do {
                line = sc.nextLine();
                System.out.println("Vous avez écrit : " + line);
            } while (!line.equalsIgnoreCase("exit"));
        }
    }
    



    Question 2



    Classe DicoReponse


    package exoavril;
    
    import java.util.ArrayList;
    
    /**
     *
     * @author willard
     */
    public class DicoReponse {
        private String texte;
        private ArrayList<ArrayList<String>> store;
    
        public DicoReponse(String texte) {
            this.texte = texte;
            store=new ArrayList<ArrayList<String>>();
        }
    
        public void addMotCles(String[] ms)
        {
            ArrayList<String> l=new ArrayList<String>();
            for(String m:ms) l.add(m);
            store.add(l);
        }
        
        public ArrayList<ArrayList<String>> getStore() {
            return store;
        }
    
        public void setStore(ArrayList<ArrayList<String>> store) {
            this.store = store;
        }
    
        public String getTexte() {
            return texte;
        }
    
        public void setTexte(String texte) {
            this.texte = texte;
        }
    
    }
    


    Classe Traitement


    package exoavril;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /**
     *
     * @author willard
     */
    public class Traitement {
    
        public static ArrayList<DicoReponse> dico;
    
        public Traitement() {
            dico = new ArrayList<DicoReponse>();
            DicoReponse rep1 = new DicoReponse("Salut, tout va bien aujourd'hui");
            rep1.addMotCles(new String[]{"comment", "tu", "va"});
            rep1.addMotCles(new String[]{"la", "forme", "?"});
            dico.add(rep1);
    
            DicoReponse rep2 = new DicoReponse("Je m'appelle willard");
            rep2.addMotCles(new String[]{"quel", "ton", "nom"});
            rep2.addMotCles(new String[]{"tu", "appelle", "t"});
            dico.add(rep2);
    
            DicoReponse rep3 = new DicoReponse("Je suis élève, au lycée charles André");
            rep3.addMotCles(new String[]{"quel", "profession", "quelle"});
            rep3.addMotCles(new String[]{"quel", "métier"});
            rep3.addMotCles(new String[]{"fait", "journée", "tu"});
            dico.add(rep3);
    
            DicoReponse rep4 = new DicoReponse("J'aime le sport et la lecture");
            rep4.addMotCles(new String[]{"loisir", "loisirs"});
            dico.add(rep4);
    
        }
    
        public static ArrayList<String> getMotsCles(String question) {
    
            String[] mots = question.split("\\W");
            ArrayList<String> lst = new ArrayList<String>();
            for (String m : mots) {
                if (!lst.contains(m) && !m.equals("")) {
                    lst.add(m);
                }
            }
            return lst;
        }
    
        public static DicoReponse getReponse(ArrayList<String> mots) {
            DicoReponse good = null;
            int corresp = -1;
            for (DicoReponse dc : dico) {
                for (ArrayList<String> rep : dc.getStore()) {
                    int cor = 0;
                    for (String m : mots) {
                        if (rep.contains(m)) {
                            cor++;
                        }
                    }
                    if (cor > corresp) {
                        corresp = cor;
                        good = dc;
                    }
                }
            }
            return good;
        }
    
        public static void affiche(DicoReponse rep) {
            System.out.println(rep.getTexte());
        }
    
        public static void main(String[] args) {
            System.out.println("Bienvenue, veuillez saisir un texte");
            String line = null;
            Scanner sc = new Scanner(System.in);
            Traitement tr = new Traitement();
    
            do {
                line = sc.nextLine();
    
                affiche(getReponse(getMotsCles(line)));
    
            } while (!line.equalsIgnoreCase("exit"));
        }
    }
    



    Question 3


    package exoavril;
    
    import java.io.IOException;
    import org.jivesoftware.smack.ConnectionConfiguration;
    import org.jivesoftware.smack.PacketListener;
    import org.jivesoftware.smack.XMPPConnection;
    import org.jivesoftware.smack.XMPPException;
    import org.jivesoftware.smack.packet.Message;
    import org.jivesoftware.smack.packet.Packet;
    import org.jivesoftware.smack.packet.Presence;
    
    /**
     *
     * @author willard
     */
    public class GTalkCom {
    
        private XMPPConnection connection;
        private Presence presence;
    
        public void connect(String mail, String password) throws XMPPException, IOException {
            // on se connecte au server gtalk
            ConnectionConfiguration connConfig = new ConnectionConfiguration("talk.google.com", 5222, "gmail.com");
            connection = new XMPPConnection(connConfig);
            connection.connect();
    
            // on se connecte avec notre login et mot de passe
            connection.login(mail, password); // mon adresse et mon mot de passe
    
            // modification de l'info de statut
            presence = new Presence(Presence.Type.available);
            connection.sendPacket(presence);
        }
    
        public void conversation() throws XMPPException, IOException {
    
    
            // reception des messages
            PacketListener pl = new PacketListener() {
    
                @Override
                public void processPacket(Packet p) {
                    System.out.println(p.getFrom() + ": " + p.toString()); // on affiche ce que l'on reçoit
                    Traitement T=new Traitement();
                    if (p instanceof Message) {
                        // Message recu;
                        Message recu = (Message) p;
                        // envoyer un message a quelqu'un d'autre
                        Message msg = new Message(p.getFrom().split("/")[0], Message.Type.chat); // adresse mail de notre correspondant
                        msg.setBody(T.getReponse(T.getMotsCles(recu.getBody())).getTexte());
                        connection.sendPacket(msg);
                    }
                }
            };
    
            connection.addPacketListener(pl, null);
    
            // Tapez Entrée dans la console pour terminer le programme.
            System.in.read();
    
            // on modifie le statut en indisponible 
            presence = new Presence(Presence.Type.unavailable);
            connection.sendPacket(presence);
        }
    
        public static void main(String[] arg) throws XMPPException, IOException {
            GTalkCom gt = new GTalkCom();
            // je me connecte avec mes identifiants Gmail
            gt.connect("willard@gmail.com", "motdepasse");
            
            // je lance la conversation qui ne s'arretera que l'orsque j'aurais tapé entrée dans la console
            gt.conversation();
        }
    }
    


    Voila, il suffisait de 225 lignes de codes, répartis dans 4 fichiers pour réussir haut la mains cet exercice. :p , n'hésitez pas à demander si vous n'avez pas compris.

    Avez vous réussi à faire mieux ?
    • Partager sur Facebook
    • Partager sur Twitter
    J'ai tous les badges d'OpenClassrooms.

    Correction de l'exo Java du mois d'avril

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown