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

avec Java Discussion :

Réalisation de l'algorithme de César


Sujet :

avec Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut Réalisation de l'algorithme de César
    Bonjour
    Je suis actuellement en terminale S et je vais passer mon oral d'isn bientot dans deux semaines mais j'ai pris beaucoup de retard dans mon projet car j'étais completement perdue et je ne savais pas par ou commencer. Donc mon projet est tel que je veux creer un interface graphique avec 3 textfields et un bouton au quel jai ajoute un ecouteur d'evenement . Mais quand au codage pour le decryptage je beug totalement . Il n'y a pas grand chose sur internet avec netbeans et le codage en cesar . Jai fait seulement (avec l'aide de mon prof ) qq lignes de code que je vous joint en image. J'ai aussi essaye qqtrucs sur javascool mais rien aboutissant a qqchose. Mon prof n'est pas le plus aimable que l'on puisse trouver et il ma dit que si continue comme ca (il ne nous reste plus que deux heures de cours) je devrais prendre le programme d'un copain qui a ete deja faite sauf que je ne veux pas le prendre car je ne veux pas qu'il pense qu j'ai abandonné alors que ce n'est pas du tout le cas je suis seulement perdue . Du coup je voudrais bien de votre aide pour faire le programme svp le plus vite possible .

    merci
    Pièce jointe 274546
    Pièce jointe 274551
    Pièce jointe 274555
    Pièce jointe 274557
    Pièce jointe 274562
    Images attachées Images attachées      

  2. #2
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Premièrement, ce serait beaucoup mieux que tu nous montrais ton code en texte via la balise CODE (pour son utilisation, voir ici).

    Ensuite, nous t'aiderons volontier, mais il faut que tu nous précises là où tu bloques. Sur la mise en place de l'interface, ou sur l'algorithme du cryptage de César ?

    Enfin, NetBeans est un outil d'aide au développement (EDI (Environnement de développement intégré) ou IDE (Integrated Development Environment) en anglais). Pour trouver des sujets sur Internet concernant le cryptage de César, tu trouveras plus de résultat en cherchant "cryptage César" ou "chiffrement César". Et pour avoir des sujets plus dédié à Java, il faudra chercher "java cryptage César".
    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.

  3. #3
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Premièrement, ce serait beaucoup mieux que tu nous montrais ton code en texte via la balise CODE (pour son utilisation, voir ici).

    Ensuite, nous t'aiderons volontier, mais il faut que tu nous précises là où tu bloques. Sur la mise en place de l'interface, ou sur l'algorithme du cryptage de César ?

    Enfin, NetBeans est un outil d'aide au développement (EDI (Environnement de développement intégré) ou IDE (Integrated Development Environment) en anglais). Pour trouver des sujets sur Internet concernant le cryptage de César, tu trouveras plus de résultat en cherchant "cryptage César" ou "chiffrement César". Et pour avoir des sujets plus dédié à Java, il faudra chercher "java cryptage César".
    Bonjour Joel

    Je te remercie de m'avoir répondu aussi rapidement.
    Mon probleme est dans l'algortihme pour le codage ou je beug. J'ai essaye de faire avec tableau de bytes avec la methode byte[] et get. Byte mais ca n'a pas marhcé.
    Je t'envoie ce que jai fait pour linstant (c'est pas grand chose...).
    Bah j'ai tout d'abord fait les 3 fenetres et le boutons qui ont ete instanciées automatiquemet par netbeans donc je ne pense pas que tu veuille ça.
    du coup voilà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     int cle= Integer.parseInt(Cle.getText());
    //
    String messageAcoder= Haut.getText();
    //
    byte octets[];
    octets[]= Haut getBYte;
    Pour ce qui est du recherche sur Internet j'ai cherche chiffrement césar et java code césar etc.. mais j'ai pas trouve ce qu'il me fallait.

  4. #4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ne t'embêtes pas avec un tableau d'octets. Le cryptage de César c'est un algorithme basé sur un décalage de caractères. Le plus simple est d'utiliser un tableau de caractères (char[]).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char[] array = messageACoder.getCharArray();
    ou simplement parcourir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0; i<messageACoder.length(); i++) {
    		char c=messageACoder.charAt(i);
                    /**...**/ 
    }
    Tu peux décaler comme ça : c+=2; pour décaler de 2 lettres à droites (a->c, b->d, ...)
    Pour ce qui dépasse après z:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( c>'z') { // si on dépasse de z
        c = (char)('a' + (c-'z'-1));  // on recommence à a (y->a, z->b)
    }
    pour reconstituer la chaîne à partir du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String messageFinal = new String(array);
    Ou si tu choisis la solution avec la boucle, utiliser un StringBuilder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringBuilder sb=new StringBuilder(messageACoder.length()); // initialisation du résulat
    et dans la boucle, après le décalage
    et pour refaire la chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String messageFinal = sb.toString();
    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.

  5. #5
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Je te remercie infiniment mais j'aurais quelques questions :
    Tout d'abord si j'ai bien compris je dois écrire les bouts de programmes après que j'ai déclaré l'entier clé ? et donc le tableau d'octets.?
    Ensuite , array c'est seulement le nom que tu as donné a ton tableau de caractère char[] et donc si je pouvais lui donner un autre nom ( excuse moi si je pose des questions comme ca car je voudrais comprendre tout le programme mot par mot car il faudrait etre capable de l'expliquer ensuite devant le jury)
    Puis, la methode char transforme bien les lettres en leur code Ascii ou pas?
    Enfin ce que sb.append(c) veut dire .
    Merci bien

  6. #6
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par unefillederennes Voir le message
    Tout d'abord si j'ai bien compris je dois écrire les bouts de programmes après que j'ai déclaré l'entier clé ?
    Oui la clé doit être définie pour pouvoir l'utiliser (c'est le décalage dans le chiffrement de César).
    Citation Envoyé par unefillederennes Voir le message
    et donc le tableau d'octets.?
    Pourquoi faire un tableau d'octets ?

    Citation Envoyé par unefillederennes Voir le message
    Ensuite , array c'est seulement le nom que tu as donné a ton tableau de caractère char[] et donc si je pouvais lui donner un autre nom ( excuse moi si je pose des questions comme ca car je voudrais comprendre tout le programme mot par mot car il faudrait etre capable de l'expliquer ensuite devant le jury)
    Bien sûr, on est libre de nommer ses variables comme on le désire. Tant que le nom a du sens, et n'est pas déjà utilisé par une autre variable.
    Citation Envoyé par unefillederennes Voir le message
    Puis, la methode char transforme bien les lettres en leur code Ascii ou pas?
    Il n'y a pas de méthode char. char c'est un type primitif, comme int ou double, ou boolean. Un type qui permet de représenter des lettres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c ='a'; // la valeur de la variable c est le caractère a
    char[] untableau = {'0','2','4','6,'8'}; // on déclare la variable untableau qui est un tableau de char contenant les chiffres pairs
    Citation Envoyé par unefillederennes Voir le message
    Enfin ce que sb.append(c) veut dire .
    Si tu regardes les autres parties que j'ai mis en exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringBuilder sb=new StringBuilder(messageACoder.length()); // initialisation du résulat
    sb est une variable de type StringBuilder, une classe qui permet de contruire des String (chaînes de caractères) en ajoutant petit à petit des sous-parties de chaînes (des lettres, des nombres, des mots, des phrases, etc.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0; i<messageACoder.length(); i++) {
    		char c=messageACoder.charAt(i);
                    /**...**/ 
    }
    La variable c c'est donc un char, ici dans la boucle, donc, successivement chaque lettre de la chaîne messageACoder.
    Dans sb.append(c);, on appelle la méthode append de sb (donc de la classe StringBuilder), en passant en paramètre c. La méthode append, c'est juste une méthode qui permet d'ajouter un truc à la chaîne qu'on est en train de construire avec sb.
    Par exemple, sin on exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String message = "bonjour";
    StringBuilder sb = new StringBuilder();
    for(int i=0; i<message .length(); i++) {
    		char c=message .charAt(i);
                   sb.append( i ); // on ajoute la valeur de i
                   sb.append('='); // on ajoute un égal
                   sb.append( c ); // on ajoute c
                   sb.append(','); // on ajoute une virgule
    }
    System.out.println( sb );
    on aura affiché dans la console :
    0=b,1=o,2=n,3=j,4=o,5=u,6=r,
    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.

  7. #7
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    D'accord , je te remercie je vais essayer ce soir ou demain avec netbeans pour voir si le programme fonction bien ou pas.
    tu n'as pas idées de comment tu me sauves car j'étais vraiment perdue maintenant que tu l'explique ça paraît tres logique.
    Je te recontacte si j'ai un probleme
    merciiiiiiiii

  8. #8
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Je veins de rentrer le code que tu m'as donne sur netbeans mais il ne marche pas car a chaque fois que jappuie sur le boutons il ne se passe rien . Je t'envoie tout le code .
    Voici le code généré automatiquement par netbeans et les bibliothèques que j'ai importé
    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
     
    import javax.swing.JTextField;
    import java.awt.event. *;
    import javax.swing. *;
    import java.awt. *;
    import java.lang.Byte;
    /**
     *
     * @author
     */
    public class NewJFrame extends javax.swing.JFrame {
     
     
        // * Creates new form NewJFrame
     
        public NewJFrame() {
            initComponents();
        }
     
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            Haut = new javax.swing.JTextField();
            Cle = new javax.swing.JTextField();
            Bas = new javax.swing.JTextField();
            jButton1 = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            Haut.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    HautActionPerformed(evt);
                }
            });
     
            jButton1.setText("Transformation");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap(139, Short.MAX_VALUE)
                    .addComponent(jButton1)
                    .addGap(56, 56, 56)
                    .addComponent(Cle, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(65, 65, 65))
                .addGroup(layout.createSequentialGroup()
                    .addGap(106, 106, 106)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(Haut, javax.swing.GroupLayout.DEFAULT_SIZE, 183, Short.MAX_VALUE)
                        .addComponent(Bas))
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(42, 42, 42)
                    .addComponent(Haut, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(30, 30, 30)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(Cle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jButton1))
                    .addGap(36, 36, 36)
                    .addComponent(Bas, javax.swing.GroupLayout.DEFAULT_SIZE, 67, Short.MAX_VALUE)
                    .addGap(35, 35, 35))
            );
     
            pack();
        }// </editor-fold>
    Voici le bouton avec l'écouteur d'evenements et le code que tu m'as donné!
    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
       private void HautActionPerformed(java.awt.event.ActionEvent evt) {                                     
     
            // TODO add your handling code here:
        }                                    
     // Déclaration des variables 
         String messageAcoder;
         int cle;
         char c;
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
            //lecture du fentre de haut 
            //Bas.setText( Haut. getText() );
            // 
            cle = Integer.parseInt(Cle.getText());
                    //
             messageAcoder = Haut. getText();
             for(int i=0; i<messageAcoder.length(); i++) {
     
                     c = messageAcoder.charAt(i);             
                 if ( c>'z') { // si on dépasse de z
                    c = (char)('a' + (c-'z'-1));  // on recommence à a (y->a, z->b)
        sb.append(c);
     StringBuilder sb=new StringBuilder(messageAcoder.length()); // initialisation du résulat 
          String messageFinal = sb.toString();            
    }
     
    }
     
     
     
            // for ( int i =0; )
            // lecture
     
     
     
        }

    Et le reste du code dont je ne comprends pas grand chose
    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
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            /* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
     
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame().setVisible(true);
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JTextField Bas;
        private javax.swing.JTextField Cle;
        private javax.swing.JTextField Haut;
        private javax.swing.JButton jButton1;
        // End of variables declaration

  9. #9
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par unefillederennes Voir le message
    il n'y a rien qui se passe .
    Ça ne compile pas, donc il ne risque pas de se passer grand chose.

    Citation Envoyé par unefillederennes Voir le message
    sur la premiere ligne avec l'entier clé il me dit qu'il n'a pas été initialisé alros qu'il me semble que si. Si je pouvais avoir plus de précision ?
    C'est normal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      int cle = Integer.parseInt(cle.getText());
    Si la variable qui représente le champ de saisie est bien cle, tu ne peux pas réutiliser ce nom pour la variable int.
    Et sinon, alors ce n'est pas la bonne variable, et le compilateur te dit que tu ne peux mettre la valeur de cle dans cle parce qu'il n'est effectivement pas encore initialisé puisque c'est là que tu l'initialise (tu ne peux pas le faire avant puisque c'est là que tu déclares cette variable).
    A priori, vu les images que tu as collées dans ton premier message (et que tu n'as pas remplacées comme je te l'avais demandées), le nom de la variable champ, c'est Cle, pas cle.

    Citation Envoyé par unefillederennes Voir le message
    Alors je viens d'essayer le code que tu as mis sur netbeans sauf que a chauqe fois que met run et que je met la clé et ensuite je saisi un texte
    Déjà il faut mettre les parties de code dans l'ordre et ne pas en oublier en chemin. Ensuite, si tu veux voir ton résultat dans ton interface il faudra penser à mettre le résultat dans le composant prévu à cet effet.

    L'algorithme de chiffrement c'est :
    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    parcourir tous les caractères c du message à coder {
       décaler c de la valeur de la clé
       ajouter le c décalé au message codé
    }

    Dans ton code il manque :
    • décaler c de la valeur de la clé
    • ajouter le c décalé au message codé


    en plus, si tu veux pouvoir ajouter le c décalé à sb (ce qui permet de construire le message codé), il faut déclarer sb avant de commencer la boucle, parce que :
    1. on l'utilise dans la boucle, pour ajouter le c décalé
    2. on l'utilise après la boucle, pour affecter le champ d'affichage



    Et à la place de ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      String messageFinal = sb.toString();
    affecte directement ton champ, qui est à priori Bas, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Bas.setText( sb.toString() );
    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.

  10. #10
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Mon ordi a competmeent planté et vient de m'effacer tout le fichier netbeans que j'avais commencé....
    J'essaye de créér un autre projet mais en vain parce que a chaque fois que je le fais l'onglet design ne s'affiche pas il y a seulement source et history ..

  11. #11
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Tout vas bien j'ai réussi à faire un autre projet.
    Je t'envoie ça tout de suite

  12. #12
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Je viens tout juste de découvrir l'onglet repondre a la discussion...
    donc voila ce que j'ai mis dnas mon nouveau projet:


    Pour ce qui est d'ajouter au messageAcoder la cle je pensais faire comme ça:
    mais je crois pense pa que ca marche puisque on peut faire ajouter a un string un int donc je bloque un peu la .
    de plus je vois pas quand sortir de la boucle.
    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
     // Déclaration des variables 
        int cle;
        String messageAcoder;
        char c ;
        StringBuilder sb;
     
        private void TransformationActionPerformed(java.awt.event.ActionEvent evt) {                                               
            // TODO add your handling code here:
            // transformation d'une chaine de caractere en char
            cle = Integer.parseInt(Cle.getText());
            // on recupere le texte quiva etre ecrit et on le stock dans une chaine de cractere appele mesageAcoder
            messageAcoder = Haut. getText();
            // on crée  la boucle qui va lire chaque caractere du messageAcoder et qui va leur designer un nombre
             for(int i=0; i<messageAcoder.length(); i++) {
           c=messageAcoder.charAt(i);
                    /**...**/ 
                // on ajoute la clé au c qui va etre donc décalé
                    c+= cle;
                // ajouter le c decale au messaggeacoder
     
     
                //avec la methode ou le primitif stringbuilder regarde lonueur 
     
                sb = new StringBuilder(messageAcoder.length());
     
     
     
     
        }                                              
     
            // met dans le textfield bas le sb qui a ete construit a partir du messageacoder en string  
             Bas.setText( sb.toString() );
    Parcontre pour ajouter au message acoder le cdecale je bloque car on ne peut pas ajouter un int dans un string .
    Enfin je vois pas trop quand sortir de la boucle

  13. #13
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par unefillederennes Voir le message
    Pour ce qui est d'ajouter au messageAcoder la cle je pensais faire comme ça:
    mais je crois pense pa que ca marche puisque on peut faire ajouter a un string un int donc je bloque un peu la .
    Non, parce que c+Cle, c'est additionner un char avec un JTextField, donc c'est n'importe quoi. Et certainement pas une String. Et messageACoder c'est le contenu de ton champ Haut en plus !!!

    Quand je dis de déclarer sb avant la boucle, ça veut dire "avant la boucle"... avant c'est avant !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     sb = new StringBuilder(messageAcoder.length()); // AVANT la boucle 
            for(int i=0; i<messageAcoder.length(); i++) { // la boucle
    Pourquoi déclarer les variables dans la classe comme attribut alors qu'elles ne servent que dans la méthode ?

    Citation Envoyé par unefillederennes Voir le message
    de plus je vois pas quand sortir de la boucle.
    Ce qui fait la sortie de boucle c'est : i<messageAcoder.length(). messageACoder.length(), c'est le nombre de caractères dans messageACoder, donc on parcourt chaque caractère de messageACoder, en faisant varier i de 0 à messageACoder.length(), exclu.

    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
     // Déclaration des variables 
     
        private void TransformationActionPerformed(java.awt.event.ActionEvent evt) {                                               
     
            int cle = Integer.parseInt(Cle.getText());
            // on recupere le texte quiva etre ecrit et on le stock dans une chaine de cractere appele mesageAcoder
            String messageAcoder = Haut. getText();
     
            // on utilise un StringBuilder pour construire le message codé
            StringBuilder sb = new StringBuilder(messageAcoder.length());
     
     
            // on crée  la boucle qui va lire chaque caractere du messageAcoder et qui va leur designer un nombre
             for(int i=0; i<messageAcoder.length(); i++) {
                char c=messageAcoder.charAt(i);
                // on ajoute la clé au c qui va etre donc décalé
                    c+= cle;
     
                if ( c>'z') { // si on dépasse de z
                    c = (char)('a' + (c-'z'-1));  // on recommence à a (y->a, z->b)
                }
     
                sb.append( c ); // on ajoute le caractère codé au résultat
     
     
     
        }                                              
     
            // met dans le textfield bas le sb qui a ete construit a partir du messageacoder en string  
             Bas.setText( sb.toString() );
     
    }
    Maintenant il y a juste un dernier trucs : on peut saisir n'importe quoi dans Cle
    1. un texte qui n'est pas un nombre, ou un texte vide : il faut tester ça sinon ça va faire une erreur, et ce ne sera pas très propre
      Par exemple, tu peux faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      if ( Cle.getText().matches("\\d+") ) { // si le texte saisi contient au moins un chiffre et que des chiffres
                  int cle = Integer.parseInt(Cle.getText());
       
                  /**...ici tout le reste du code ...**/
       
      }
      else {
      	JOptionPane.showMessageDialog(null, "Veuillez saisir un nombre pour la clé");
      }
      ou utiliser un champ de saisie qui ne permet de saisir que des nombres
    2. on peut saisir 0. Ce n'est pas très grave, ça va fonctionner. Mais on pourrait l'intercepter, et soit afficher un message pour dire que le message ne sera pas codé, soit simplement afficher directement dans Bas ce qu'il y a dans Haut (juste pour montrer que tu as bien conscience qu'il n'y a pas besoin d'exécuter tout ça puisque ça ne changera rien)
    3. On peut saisir un nombre négatif. Avec le Cle.getText().matches("\\d+"), on ne pourrait pas. Soit tu utiliser cette technique, soit tu veux permettre des décalages à gauche, et il faudra donc Cle.getText().matches("-?\\d+") un - au début ou pas, suivi d'au moins un chiffre
      Mais dans ce cas, on peut avoir un dépassement à gauche du 'a', comme on a décalage à droite du 'z' avec le décalage à gauche. Il faut le traiter, avec :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if ( c<'a' ) {
          c = c = (char)('z'-('a'-c-1));
      }
    4. On peut saisir un décalage > 25, ou inférieur à -25, et donc le problème du dépassement sera plus compliqué à gérer que ce que je t'ai indiqué
      Pour éviter ça,
      • On peut tester et afficher un message à l'utilisateur qui oblige à saisir un nombre entre -25 et 25 (enfin 26 ou -26 c'est équivalent à 0, on pourrait aussi le saisir)
      • on peut obliger le nombre a être entre 0 et 25 en utilisant un modulo (opérateur %).
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        if( cle>25 ) {
           cle = cle%26;
        } else if ( cle<-25 ) {
           cle = -(-cle%26) ;
        }
    5. tout ce que je t'ai montré ne fonctionne que pour un message à coder contenant des lettres minuscules. Soit empêcher de saisir que des lettres minuscules dans Haut, soit afficher un message quand c'est le cas, soit traiter lors du parcours (on peut traiter par exemple les majuscules aussi, et dire que tous les autres caractères ne seront jamais décalés par exemple).


    Une autre technique pour éviter tous ces problèmes de dépassement et d'utiliser un tableau qui contient les lettres décalées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char[] lettredecalees = new char[26];
    		for (int i = 0; i < 26; i++) {
    			int c = (i + cle);
    			if (c > 0) {
    				c = c % 26;
    			} else {
    				c = -(-c % 26) + 26;
    			}
    			lettredecalees[i] = (char) ('a' + c);
    		}
    Ensuite, pour décaler un caractère, ça devient tout simple, puisqu'il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     c = lettredecalees[c-'a'];
    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.

  14. #14
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Je te remercie infiniment , tu n'as pas idée de comment tu viens de me sauver la vie ( moi qui visais la mention tres bien j'aurais maintenant des chances parce que l'isn plombait toute ma moyenne mais maintenant que tu l'explique ca parait beaucoup plus simple. Tout est donc une question de pédagogie.)
    Je montrerais tout ca a mon professeur jeudi matin et je te redis ce qu'il en a pensé .
    Merci beaucoup encore , cest sincere

  15. #15
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Bonjour !
    C'est encore moi.
    Alors j'ai vu mon professeur jeudi pour lui montrer le programme il m'a dit que c'était bien. Je lui ai demandé comment faire pour ajouter la clé au message codé il m'a dit que d'abord je devais converit (avec un parsing ) mon char en entier, ensuite ajouter la clé au message codé et enfin reconvertir en char. Donc j'ai crée une autre variable : un int que j'ai nommé codeascii
    Je pensais à faire :
    mais ca ne marche pas .

    Voici ce qu'il y a dans mon programme pour l'instant:
    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
    if ( Cle.getText().matches("\\d+") ) { // si le texte saisi contient au moins un chiffre et que des chiffres
                // conversion d'une chaine de caractere en entier 
                 pas = Integer.parseInt(Cle.getText());
     
         //on oblige a choisir un nombre entre 0 et 25 avec le modulo %        
        if( pas>25 ) {
       pas = pas%26;
    } 
    else if ( pas<-25 ) {
       pas = -(-pas%26) ;
    }           
     
             // on recupere le texte quiva etre ecrit et on le stock dans une chaine de cractere appele mesageAcoder
            messageAcoder = Haut. getText();
     
            // on utilise un StringBuilder pour construire le message codé
           sb = new StringBuilder(messageAcoder.length());
     
     
            // on crée  la boucle qui va lire chaque caractere du messageAcoder et qui va leur designer un nombre
             for(int i=0; i<messageAcoder.length(); i++) {
                 c=messageAcoder.charAt(i);
                // on ajoute la clé au c qui va etre donc décalé à revoir car un char et un entier ne peuvent pas s'ajouter 
                   //c=(int) c+pas;
                //   codeascii= char.parseInt(c);
                 //    c = (char)(int)codeascii;
                if ( c>'z') { // si on dépasse de z
                    c = (char)('a' + (c-'z'-1));  // on recommence à a (y->a, z->b)
                }
     
                sb.append( c ); // on ajoute le caractère codé au résultat
     
     
     
        }                                    
     
    }
    else {JOptionPane.showMessageDialog(null, "Veuillez saisir un nombre pour la clé");
    }                 
     
            // met dans le textfield bas le sb qui a ete construit a partir du messageacoder en string  
             Bas.setText( sb.toString() );
     
        }

  16. #16
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par unefillederennes Voir le message
    Bonjour !
    C'est encore moi.
    Alors j'ai vu mon professeur jeudi pour lui montrer le programme il m'a dit que c'était bien. Je lui ai demandé comment faire pour ajouter la clé au message codé il m'a dit que d'abord je devais converit (avec un parsing ) mon char en entier, ensuite ajouter la clé au message codé et enfin reconvertir en char. Donc j'ai crée une autre variable : un int que j'ai nommé codeascii
    Je pensais à faire :
    mais ca ne marche pas .

    Voici ce qu'il y a dans mon programme pour l'instant:
    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
    if ( Cle.getText().matches("\\d+") ) { // si le texte saisi contient au moins un chiffre et que des chiffres
                // conversion d'une chaine de caractere en entier 
                 pas = Integer.parseInt(Cle.getText());
     
         //on oblige a choisir un nombre entre 0 et 25 avec le modulo %        
        if( pas>25 ) {
       pas = pas%26;
    } 
    else if ( pas<-25 ) {
       pas = -(-pas%26) ;
    }           
     
             // on recupere le texte quiva etre ecrit et on le stock dans une chaine de cractere appele mesageAcoder
            messageAcoder = Haut. getText();
     
            // on utilise un StringBuilder pour construire le message codé
           sb = new StringBuilder(messageAcoder.length());
     
     
            // on crée  la boucle qui va lire chaque caractere du messageAcoder et qui va leur designer un nombre
             for(int i=0; i<messageAcoder.length(); i++) {
                 c=messageAcoder.charAt(i);
                // on ajoute la clé au c qui va etre donc décalé à revoir car un char et un entier ne peuvent pas s'ajouter 
                   //c=(int) c+pas;
                //   codeascii= char.parseInt(c);
                 //    c = (char)(int)codeascii;
                if ( c>'z') { // si on dépasse de z
                    c = (char)('a' + (c-'z'-1));  // on recommence à a (y->a, z->b)
                }
     
                sb.append( c ); // on ajoute le caractère codé au résultat
     
     
     
        }                                    
     
    }
    else {JOptionPane.showMessageDialog(null, "Veuillez saisir un nombre pour la clé");
    }                 
     
            // met dans le textfield bas le sb qui a ete construit a partir du messageacoder en string  
             Bas.setText( sb.toString() );
     
        }
    Finalement j'ai convertit avec une autre méthode qui marche.
    J'ai mis run et saisi abc avec la clé de 2 mais l'ecran m'affiche quelque chose étrange qui est : ÂÄÆ
    Je t'envoie mon code car je ne vois pas ou est le probleme.
    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
    int pas;
        String messageAcoder;
        char c ;
        int codeascii;
        int i;
        StringBuilder sb;
        char ccode;
    if ( Cle.getText().matches("\\d+") ) { // si le texte saisi contient au moins un chiffre et que des chiffres
                // conversion d'une chaine de caractere en entier 
                 pas = Integer.parseInt(Cle.getText());
     
         //on oblige a choisir un nombre entre 0 et 25 avec le modulo %        
        if( pas>25 ) {
       pas = pas%26;
    } 
    else if ( pas<-25 ) {
       pas = -(-pas%26) ;
    }           
     
             // on recupere le texte quiva etre ecrit et on le stock dans une chaine de cractere appele mesageAcoder
            messageAcoder = Haut. getText();
     
            // on utilise un StringBuilder pour construire le message codé
           sb = new StringBuilder(messageAcoder.length());
     
     
            // on crée  la boucle qui va lire chaque caractere du messageAcoder et qui va leur designer un nombre
             for( i=0; i<messageAcoder.length(); i++) {
                 c=messageAcoder.charAt(i);
                // on ajoute la clé au c qui va etre donc décalé à revoir car un char et un entier ne peuvent pas s'ajouter 
                   //c=(int) c+pas;
                 codeascii= (int) c ; // on convertit char en int
                 codeascii= codeascii + c;// on ajoute la clé
                 ccode= (char) codeascii; // on reconvertit int en char
     
                if ( c>'z') { // si on dépasse de z
                    c = (char)('a' + (c-'z'-1));  // on recommence à a (y->a, z->b)
                }
     
                sb.append( ccode ); // on ajoute le caractère codé au résultat
     
     
     
        }                                    
     
    }
    else {JOptionPane.showMessageDialog(null, "Veuillez saisir un nombre pour la clé");
    }                 
     
            // met dans le textfield bas le sb qui a ete construit a partir du messageacoder en string  
             Bas.setText( sb.toString() );
     
        }

  17. #17
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par unefillederennes Voir le message
    Bonjour !
    C'est encore moi.
    Alors j'ai vu mon professeur jeudi pour lui montrer le programme il m'a dit que c'était bien. Je lui ai demandé comment faire pour ajouter la clé au message codé il m'a dit que d'abord je devais converit (avec un parsing ) mon char en entier, ensuite ajouter la clé au message codé et enfin reconvertir en char. Donc j'ai crée une autre variable : un int que j'ai nommé codeascii
    Je pensais à faire :
    mais ca ne marche pas .
    Non, et ça ne risque pas. char est un mot réservé, pour désigner le type char (caractère). Et il n'y a pas de méthode sur un type primitif.

    Je t'ai réponde dès le début :
    Citation Envoyé par joel.drigo Voir le message
    Tu peux décaler comme ça : c+=2; pour décaler de 2 lettres à droites (a->c, b->d, ...)
    c ici c'est un char ! et le 2 c'est un exemple de clé (qui vaut 2 ici). Ce code c'est l'exemple que je t'ai donné pour te montrer comment décaler un char de 2.

    Dans un autre exemple, il y a d'ailleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // on ajoute la clé au c qui va etre donc décalé
    c+= cle;
    ça me semble pourtant clair.

    Si tu préfères

    Donc quand tu dis "Je lui ai demandé comment faire pour ajouter la clé au message codé il m'a dit que d'abord je devais converit (avec un parsing ) mon char en entier, ensuite ajouter la clé au message codé et enfin reconvertir en char", je ne comprends pas pourquoi il te répond ça et pas "pourtant c'est déjà ce que tu fais dans le code que tu me montres. pourquoi tu me demandes alors comment faire ?". Et je ne sais pas de quel parsing il parle. Si en entrée tu as un message à coder, il n'y a pas de parsing à faire. Il suffit de parcourir les caractères. Il n'y a pas plus de conversion en int non plus. Ce qui ne veut rien dire d'ailleurs (il y a autant de conversion char vers int qu'on peut en imaginer). Et cette soi-disante conversion en entier ne servirait à rien ici. Sauf avec la solution qui utilise un tableau rempli avec l'alphabet décalé (la dernière que je t'ai montrée). Mais il n'y a pas plus de parsing à faire. Et la conversion en int dans ce contexte correspond juste à déterminer le numéro d'ordre du caractère à coder dans l'alphabet, ou plus exactement de la position qu'il aurait dans un tableau de 26 lettres, ceci pour obtenir la lettre décalée correspondante. Et je t'ai donné le code pour faire cette "conversion". C'est le c-'a' dans le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = lettredecalees[c-'a'];
    Il n'y a pas de parsing nulle part ici.


    Ensuite, dans les essais que tu as fait dans le code que tu montres :

    [LIST][*] //c=(int) c+pas;
    Si c est un char, pourquoi vouloir caster quoique ce soit en int pour l'affecter à c. c est du char, au pire on peut avoir à caster quelque chose en char pour l'affecter à c, mais certainement pas en int.[*]// codeascii= char.parseInt(c);
    Ce n'est pas comme ça qu'on obtient le code ASCII d'un caractère, mais en faisant tout simplement : int codeascii = (int)c;, mais attention ça ne fonctionne que pour certains caractères (ceux qui ont un code ASCII en l'occurence, donc tel que codeascii soit compris entre 0 et 127 inclus.


    Et donc tu vas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int code = (int)c; // une conversion en code ascii (si c est une lettre)
    code+=cle;
    // ici attention à la sortie de l'alphabet : il y a des tests à faire, ou un modulo
    c = (char)code;
    au lieu de c+=cle;C'est quoi l'intérêt ? en plus ça va te compliquer les tests pour savoir si le décalage ne fait pas sortir de l'alphabet et si'l faut pas reboucle en conséquence (au lieu de comparer des char avec 'a' et 'z' tu vas comparer des codes ASCII avec ceux de 'a' et de 'z'.

    (Ou encore avec l'alphabet décalé dans un tableau, tu vas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int index = (int)c;
    int indexa = (int)'a';
    int index = index - indexa;
    c = alphabetdecale[index];
    au lieu de
    C'est quoi l'intérêt à part écrire plus de code ?
    Et si le but est de décomposer en étapes, on pourrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int index = c-'a'; // détermine l'index de la lettre c dans un tableau de 26 lettres
    char cdecale = alphabetdecale[index]; // le caractère décalé est celui qui se trouve dans le tableau des lettres décalées à la position déterminée.
    C'est quand même plus direct et concis.
    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.

  18. #18
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par unefillederennes Voir le message
    Finalement j'ai convertit avec une autre méthode qui marche.
    J'ai mis run et saisi abc avec la clé de 2 mais l'ecran m'affiche quelque chose étrange qui est : ÂÄÆ
    Je t'envoie mon code car je ne vois pas ou est le probleme.
    Je dirais que c'est probablement dû au fait que les caractères sortent de l'alphabet.
    Bah oui,


    1. tu utilise une variable ccode pour représenter le caractère décalé. avant on se contentait de décaler c

      Donc pour faire le test pour savoir si le caractère ne dépasserait pas à droite de 'z' on faisait un test sur c et on corrigeait c selon :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
       
                  if ( c>'z') { // si on dépasse de z
                      c = (char)('a' + (c-'z'-1));  // on recommence à a (y->a, z->b)
                  }
      or toi tu utilise ccode pour décaler maintenant donc tu testes toujours c et tu corriges c. ça changera donc rien à ccode.



    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       codeascii= (int) c ; // on convertit char en int
                   codeascii= codeascii + c;// on ajoute la clé
      c c'est le caractère courant en cours de codage, un caractère du message à coder. Il n'y a rien qui te saute aux yeux dans la deuxième ligne (surtout comparé au commentaire)





    Et, par ailleurs, dans le code suivant, il n'y a rien qui t'interpelle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    else {JOptionPane.showMessageDialog(null, "Veuillez saisir un nombre pour la clé");
    }                 
     
            // met dans le textfield bas le sb qui a ete construit a partir du messageacoder en string  
             Bas.setText( sb.toString() );
     
        }
    Le fait que tu affectes un resulat de codage alors que juste avant on a affiche un message qui dit que la clé n'est pas un nombre. Si la clef n'est pas un nombre, sb n'est même pas censé exister. Le truc c'est que ton programme un coup plantera et sinon affichera n'importe quoi en cas de clé non numérique. Un bon moyen d'éviter ce genre de code incohérent c'est de déclarer les variables là où il faut, c'est-à-dire au plus proche de là où on en a besoin : ça fait que quand on utilise une variable à un endroit où elle n'a aucun sens fonctionnel ça ne compile pas.
    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.

  19. #19
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Ahhh je viens de comprendre ce que tu voulais dire. Alors du coup au lieu de
    J'ai mis:
    Pour ce qui est de la boucle; c'est juste un oublie de ma part donc j'ai mis ccode au lieu de c.
    et ça a marché!!!!!!!!!!!!!!
    Merci beaucoup!!!!
    Je ne sais meme pas comment te remercier .
    Par contre un petit problème qui est que lorsque je mets plusieurs mots a la suite le message codé qui est affiché il y a un point entre chaque mots et je me demandais c'était du à quoi? et si l'on pouvait y remédier?
    Juste une derniere question qui n' a rien a voir avec l'algorithme. Je me demandais si on pouvait mettre une photo de fond sur la fentre pour l'aspect esthétique.Est ce possible avec netbeans?

  20. #20
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par unefillederennes Voir le message
    Merci beaucoup!!!!
    Je ne sais meme pas comment te remercier .
    Si je pouvais être sûr que tu pourrais refaire tout ça toute seule (sans aide) disons dans 1 mois (ou autrement dit que tu as vraiment bien tout compris), je serais pleinement satisfait

    Citation Envoyé par unefillederennes Voir le message
    Par contre un petit problème qui est que lorsque je mets plusieurs mots a la suite le message codé qui est affiché il y a un point entre chaque mots et je me demandais c'était du à quoi? et si l'on pouvait y remédier?
    Je t'en ai parlé dans un de mes messages de ça. Tout ce système de décalage de lettres ne fonctionnent que sur des lettres. Faut dire que le César dans "codage de César" c'était un empereur romain et que les romains n'avait que des lettres majuscules pour écrire (pas d'espace et pas de chiffres (ils utilisaient des lettres pour écrire des nombres). Du coup le chiffrement de césar ne fonctionne que pour des lettres. Pour le reste, et bien, le plus simple c'est ne pas le chiffrer.

    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
    for(int i=0; i<messageACoder.length; i++) {
     
       char lettreACoder = messageACoder.charAt(i);
     
       if ( lettreACoder>='A' && lettreACode<='Z' ) { // c'est une lettre majuscule
            lettreACoder = Character.toLowerCase(lettreACoder); // on la convertit en minuscule
     
       }
       if ( lettreACoder>='a' && lettreACode<='z' ) { // si c'est une lettre minuscule
     
             // on fait le chiffrement...
     
     
       }
       else {
     
             // et pour tous les autres, on met le caractère non codé dans le message
             sb.append(lettreACoder);
     
        }
     
     
    }
    L'autre option serait de supprimer tous les caractères qu'on ne sait pas décaler, ou interdire de lancer le chiffrement s'il y a un caractère qu'on ne sait pas coder (comme c'est fait si on ne saisit pas un nombre dans le champ de la clef).



    Citation Envoyé par unefillederennes Voir le message
    Juste une derniere question qui n' a rien a voir avec l'algorithme. Je me demandais si on pouvait mettre une photo de fond sur la fentre pour l'aspect esthétique.Est ce possible avec netbeans?
    Oui, c'est possible. Seulement ça dépend ce que tu attends exactement. Parce que si tu mets une photo de fond, alors que tu as des composants dans ta fenêtre (ici des boutons, des champs de saisie, etc, eux vont être au-dessus de ton image de fond, et du coup ça ne pas être aussi joli que tu le penses (sauf si l'image de fond est prévu pour, avec des effets graphiques qui intègrent les boutons et le champs, mais ça c'est une autre histoire). Après il y a des moyens de faire que le fond des champs de saisie soit transparent aussi, mais ce n'est pas simple. J'ai donné les deux solutions (avec le code quasi prêt à l'emploi) ici, qui est l'utilisation d'un code que j'ai donné ici (dans ce message du verrras le lien sur la FAQ pour mettre simplement l'image dans le fond sans se préoccuper des composants qui sont dans la fenêtre.
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réalisation d'un algorithme de tri
    Par Detenu-1_0-J_6_4 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 04/11/2016, 14h03
  2. Réponses: 2
    Dernier message: 11/06/2009, 17h06
  3. Réaliser un algorithme de satisfiabilité
    Par Abdoulive dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 01/02/2009, 15h23
  4. Réaliser un algorithme d'affectations
    Par Nanouche dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/09/2008, 17h21
  5. [AIDE] besoin d'aide pour réaliser un algorithme
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 40
    Dernier message: 18/01/2008, 09h35

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