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 :

Message codé avec Java


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Message codé avec Java
    Bonjour à tous,

    Je cherche à écrire un programme qui transforme une chaine de caractère en un message codé : il doit remplacer chaque caractère par la lettre située 4 positions plus loin dans l'alphabet. Or, en grand débutant largué, je suis coincé...J'ai écris une boucle for, qui s'est avérée fausse, et j'ai ua moins compris pourquoi ;
    1/ Pour une valeur de i, le code prend la lettre de l'alphabet à la position i et la remplace, au lieu de prendre la lettre de la chaine de caractère.
    2/ Le code transforme la chaine caractère par caractère au lieu d'afficher le message codé complet d'un seul coup. (par exemple, pour abcd, cela donne ebcdafcdabgabch au lieu de efgh).

    J'ai compris les problèmes mais je ne sais pas comment les résoudre, j'aimerais de l'aide.

    Mon code est ci dessous; j'ai écris très peu, le début et la fin était déjà rédigées par les enseignants.

    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
    import java.util.Scanner;
     
    public class Crypto {
     
        static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
        static final int DECALAGE = 4;
     
        static Scanner scanner = new Scanner(System.in);
     
        public static void main(String[] args) {
     
            System.out.println("Veuillez entrer une chaine de caracteres : ");
            String s = scanner.nextLine();
     
            // la chaine a coder
            String aCoder = "";
            // la chaine codee
            String chaineCodee = "";
     
            /*******************************************
             * Completez le programme a partir d'ici.
             *******************************************/
     
            aCoder = s;
     
    		 for(int i=0; i<s.length()-1; ++i){			
    			chaineCodee += aCoder.replace(aCoder.charAt(i), ALPHABET.charAt(aCoder.charAt(i)+DECALAGE));			
    			}
     
     
            /*******************************************
             * Ne rien modifier apres cette ligne.
             *******************************************/
            System.out.format("La chaine initiale etait : '%s'\n", s);
     
            if (aCoder.isEmpty()) {
                System.out.println("La chaine a coder est vide.\n");
            } else {
                System.out.format("La chaine a coder est : '%s'\n", aCoder);
                System.out.format("La chaine codee est : '%s'\n", chaineCodee);
            }
        }
    }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Micawber Voir le message
    Pour une valeur de i, le code prend la lettre de l'alphabet à la position i et la remplace, au lieu de prendre la lettre de la chaine de caractère.
    Non, ton code fait autre chose, d'obsucr et incohérent.

    Regarde la documentation replace. Ca ne replace pas un position précise de la chaine, ça replace tous les caractère correspondant au caractère donné.
    Ensuite ton code concatène chaque itération, hors chaque itération génère une chaine complete avec seulement un seul type de caractère remplacé

    Il faut que tu réfléchisse un peu plus à ton code. Comment doit-il se comporter. La logique naive et simpliste voudrait que tu lise un caractère à la fois, que tu trouve sa transformée (son codage) et que tu l'ajoute à la liste des caractères déjà transformés pour former ta chaine codée au fur et à mesure:

    abacadae =>

    a -> e ==> resultat = e
    b -> f ==> resultat = e+f
    a -> e ==> resultat = ef+e
    c -> g ==> resultat = efe +g
    ....

    etc.


    N'oublie pas aussi que tu va devoir gérer les cas xyz que ton code actuel est incapable de gérer

  3. #3
    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,

    En plus, je ne vois pas comment ton programme pourrait transformer "abcd" en quoique ce soit, vu qu'il plante à cause de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALPHABET.charAt(aCoder.charAt(i)+DECALAGE)
    Déjà avec le premier caractère (i=0), aCoder.charAt(i) retourne 'a', soit 97 en entier, auquel on ajouter 4, ce qui donne 101. Vu qu'il n'y a que 26 caractères dans ALPHABET, ALPHABET.charAt( 101 ) soulève une exception (StringIndexOutOfBoundsException). Regarde plutôt du côté de String.indexOf(), en prévoyant ALPHABET pour qu'il gère le xyz, comme l'a précisé @Tchize_.
    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.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    J'ai réussi à résoudre le problème de la concaténation, mais je n'arrive toujours pas à résoudre l'autre problème : mon code transforme "abcd" en "efgh". Je vois très bien pourquoi mais je sais pas quoi écrire pour coder la bonne phrase...Je suis bloqué quoi :/

  5. #5
    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
    Quel est ton nouveau code ?
    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.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Le voici. J'imagine bien qu'il manque plein de trucs, cette version actuelle corrige juste la concaténation, mais je sais pas par où aller; j'ai essayé plusieurs choses qui se sont avérées fausses et que j'ai enlevé du code ci joint.

    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
    import java.util.Scanner;
     
    public class Crypto {
     
        static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
        static final int DECALAGE = 4;
     
        static Scanner scanner = new Scanner(System.in);
     
        public static void main(String[] args) {
     
            System.out.println("Veuillez entrer une chaine de caracteres : ");
            String s = scanner.nextLine();
     
            // la chaine a coder
            String aCoder = "";
            // la chaine codee
            String chaineCodee = "";
     
            /*******************************************
             * Completez le programme a partir d'ici.
             *******************************************/  
     
            aCoder = s;
     
    		 for(int i=0; i<aCoder.length(); ++i){			  			
    			 chaineCodee += ALPHABET.charAt(i+DECALAGE);
    			}
     
            /*******************************************
             * Ne rien modifier apres cette ligne.
             *******************************************/
            System.out.format("La chaine initiale etait : '%s'\n", s);
     
            if (aCoder.isEmpty()) {
                System.out.println("La chaine a coder est vide.\n");
            } else {
                System.out.format("La chaine a coder est : '%s'\n", aCoder);
                System.out.format("La chaine codee est : '%s'\n", chaineCodee);
            }
        }
    }

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Bien ta boucle est correcte et la partie de gauche de ton assignation correcte. En tout cas pour un débutant. Maintenant, la partie droite, car la programmation ca ne devine pas magiquement ce que tu veux faire, ça fait exactement ce que tu écrit et uniquement ce que tu écrit.

    Qu'est ce que le lit? Prendre la caractère dans Alphabet, se trouvant à l'indice i+décalage. i étant l'indice de boucle, qui va de 0 à longueur de la chaine, ton résultat donc, tu t'en doute bien, ne dépend donc que de l'alphabet et pas de la chaine de départ. C'est plutôt embêtant non?

    Si tu devais faire à la main le premier caractère, demande toi, comment le ferais-tu? Qu'est-ce qui devrait apparaitre comme éléments dans la réponse?
    Inévitablement, on devrais trouver une référence à aCoder.charAt(i), car c'est ce caractère que l'on transforme.
    Il faut aussi une référence à l'alphabet.
    Ton alphabet commence avec la transformée de a à l'indice 0, mais a ne vaut pas 0 en java, donc il faut une opération pour comvertir d'abord a en 0, b en 1, etc, pour ensuite aller chercher respectiement les élément 0, 1 ... de Alphabet.

    Et tout ça doit apparaitre dans ton élément de réponse.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    J'ai compris ce que fait on code actuel, oui. Pour convertir a en 0, b en 1..., un copain m'a dit la même chose, mais je n'ai pas encore appris à faire ça ...:/ c'est avec IntegerParseInt ? Vous pouvez me donner un début de code, un ou deux indices concrets en guise d'exemple pour que je m'en sorte ? Je compte y passer une bonne partie de mon week end.

  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
    Salut,

    Parce que les char en Java sont stockés sous forme numérique, tu peux faire des opérations comme avec des int. Donc la position de 'A' dans l'alphabet est égale à 'A'-'A', qui vaut 0, 'B'-'A', vaut 1, etc.

    Donc tu peux avoir la position d'une lettre dans un alphabet de minuscules comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int positionDansLalphabet = string.toLowerCase().charAt(i)-'a';
    ou, qui fonctionne dans le cas général (que pour des lettres sans accent) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c = string..charAt(i);
    int positionDansLalphabet = Character.isUpperCase(c)?c-'A':c-'a';
    EDIT : ah, puis, j'oubliais, tu peux utiliser aussi indexOf() comme je te l'avais suggéé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c = Character.toLowerCase(string.charAt(i));
    int positionDansLalphabet = ALPHABET.indexOf(c);
    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
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Ok merci je vais essayer ça. J'étais en train d'essayer un truc (voir le code ci dessous, mais le raisonnement n'y est pas complet), mais ça ne marchait pas bien non plus

    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
    import java.util.Scanner;
     
    public class Crypto {
     
        static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
        static final int DECALAGE = 4;
     
        static Scanner scanner = new Scanner(System.in);
     
        public static void main(String[] args) {
     
            System.out.println("Veuillez entrer une chaine de caracteres : ");
            String s = scanner.nextLine();
     
            // la chaine a coder
            String aCoder = "";
            // la chaine codee
            String chaineCodee = "";
     
            /*******************************************
             * Completez le programme a partir d'ici.
             *******************************************/  
     
            aCoder = s;
            int l = aCoder.length();
     
    		 for(int i=0; i<l; ++i){
    			int num1 = Character.getNumericValue(ALPHABET.charAt(i));
    			int num2 = Character.getNumericValue(aCoder.charAt(i));
    			if(num1 == num2){
    				num1 = num2 + DECALAGE;				
    			}			
     
    			chaineCodee += num1;
    			// Ensuite, reconvertir des int en char ?? Possible ??
    			}
     
            /*******************************************
             * Ne rien modifier apres cette ligne.
             *******************************************/
            System.out.format("La chaine initiale etait : '%s'\n", s);
     
            if (aCoder.isEmpty()) {
                System.out.println("La chaine a coder est vide.\n");
            } else {
                System.out.format("La chaine a coder est : '%s'\n", aCoder);
                System.out.format("La chaine codee est : '%s'\n", chaineCodee);
            }
        }
    }

  11. #11
    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
    joel.drigo et tchize_ ton donnée suffisant de piste pour commencer. Ils ne sont pas là pour faire ton code à ta place.

    Sachant que ce cryptage est l'un des plus connu en cryptographie. C'est probablement l'exemple le plus coder par les étudiants, quelque soit le langage.
    Si tu ne comprends pas comment convertir un char 'a' en 0 et un char 'b' en 1. c'est que tu n'as probablement pas lu ton cours correctement. Ou que tu ne l'as pas compris.
    Avec le code qu'on t'as fournit, il existe plusieurs solutions à cela :
    1. Utiliser la position dans ALPHABET du caractère.
    2. Utiliser les cast char / int. (Ce qui rend le tableau ALPHABET inutile)

    Pour rappel, le cryptage César, c'est :
    1. Trouver la position d'un caractère dans un tableau.
    2. Faire un décalage dans ce tableau.
    3. Prendre le nouveau caractère par rapport à cette nouvelle position.

    Présente nous un code qui fait ces trois éléments de manière propre et séparé :
    1. On veux avoir un int positionLettre qui corresponds à la position de la lettre X dans le tableau ALPHABET.
    2. On veux avoir un int positionCode qui réalise le décalage en prenant compte de la taille de tableau. ( Il faut utiliser le modulo %)
    3. Ajouter le caractère se trouvant à positionCode et l'ajouter au string de résultat.

    Le mieux est de faire 3 méthodes qui réalise chacune de ces tâches.

    Cordialement,
    Patrick Kolodziejczyk.

    Il existe de nombreux sujet sur ce forum parlant de ce sujet :
    http://www.developpez.net/forums/d57...ryptage-cesar/
    http://c.developpez.com/telecharger/...thode-de-Cesar
    Et de nombreuse implémentation sur le web :
    http://rosettacode.org/wiki/Caesar_cipher#Java
    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.

  12. #12
    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
    Character.getNumericValue() permet d'avoir la valeur numérique d'un caractère qui représente un chiffre. Character.getNumericValue('3') donne 3 et Character.getNumericValue('\u0633') donne 3 par exemple (caractère ٣). Mais Character.getNumericValue('a') donne -1 parce que a n'est pas un chiffre.
    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.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Ouais mais j'en ai marre, ça fait une semaine que je fais un blocage sur ce truc, mon cours m'a pas encore appris les méthodes, et dans les consignes on est pas censés en utiliser pour cet exo. De plus, le cours est assez minimaliste et j'y trouve pas d'infos.. Bref, ça commence à me dégoûter et je suis largué, je demanderai pas autant d'aide sinon. Et c'est pas faute d'avoir essayé, quoi que j'essaie je bloque :/

  14. #14
    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
    Les briques qui te sont nécessaire sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // le parcours d'un tableau // Et accéder à au caractère courant.
    for (int i = 0; i < aCoder.length(); i++) {
        System.out.println(aCoder.charAt(i));
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //La comparaison de deux caractères :
    char a= 'a';
    char b = 'b';
    if(a == b){
        System.out.println("les caractères sont identique !");
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // l'utilisation d'un modulo pour ne pas sortir de la taille d'une string
    int nombre = 42;
    String tutu = "tutu"
    int taille = tutu.length();
    int nombreUtile = nombre%taille;
    System.out.println(nombreUtile);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Ajouter un caractère dans un String (version basique):
    String test ="test";
    char a = 'a';
    test+=a;
    System.out.println(test);
    Avec ça, est les consigne donnée avant. Il n'y a aucune raison que tu n'y arrive pas.

    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.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Ok merci, je m'y remet à fond dès ce soir !

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    J'y suis presque (ça fait plaisir) ! J'ai réussi à crypter les lettres entre a et v, j'ai réussi à prendre en compte les espaces (j'ai fait un bidouillage en créant une chaîne ALPHABET2 = ALPHABET + ' ' Je bute encore sur a prise en compte des lettres wxyz...La méthode avec le modulo, il faut d'abord passer en numérique ? Est-ce que ça implique que je modifie beaucoup mon code (ci dessous ?)

    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
    import java.util.Scanner;
     
    public class Crypto {
     
        static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
        static final int DECALAGE = 4;
     
        static Scanner scanner = new Scanner(System.in);
     
        public static void main(String[] args) {
     
            System.out.println("Veuillez entrer une chaine de caracteres : ");
            String s = scanner.nextLine();
     
            // la chaine a coder
            String aCoder = "";
            // la chaine codee
            String chaineCodee = "";
     
            /*******************************************
             * Completez le programme a partir d'ici.
             *******************************************/  
     
            String ALPHABET2 = ALPHABET + ' ';
            aCoder = s;
            int m = ALPHABET2.length();
            int l = aCoder.length();        
            int nombre = m%l; // Sert à ne pas sortir de la taille du string
     
            for(int j=0; j<l; ++j){
            	for(int i=0; i<m; ++i){
            		// cryptage des caractères de a à v
    				if(aCoder.charAt(j) == ALPHABET2.charAt(i) && aCoder.charAt(j) != ' ')
    				{
    					chaineCodee += ALPHABET2.charAt(i+DECALAGE);
    				} else {
    					// prise en compte des espaces
    					if (aCoder.charAt(j) == ALPHABET2.charAt(i) && aCoder.charAt(j) == ' '){
    						chaineCodee += ' ';					
    					}
    				// Il reste à écrire de quoi prendre en compte les lettres wxyz !	
    				}
     
    				}
            	}    
     
     
            /*******************************************
             * Ne rien modifier apres cette ligne.
             *******************************************/
            System.out.format("La chaine initiale etait : '%s'\n", s);
     
            if (aCoder.isEmpty()) {
                System.out.println("La chaine a coder est vide.\n");
            } else {
                System.out.format("La chaine a coder est : '%s'\n", aCoder);
                System.out.format("La chaine codee est : '%s'\n", chaineCodee);
            }
        }
    }

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Micawber Voir le message
    .La méthode avec le modulo, il faut d'abord passer en numérique ? Est-ce que ça implique que je modifie beaucoup mon code (ci dessous ?)
    Pour information, tous tes accès à des tableau, dans ton code, sont déjà "en numérique", puisque en java les indice d'un tableau ne peuvent être que des entiers.

    Donc non, très peu de modifications.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Ok merci je vais essayer de finir ça !

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    C'est bon j'y suis arrivé Merci

    (Et maintenant exercice suivant, wouhou !)

  20. #20
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Prise en compte de wxzy
    bonjour Mataigne,

    J'essaie de résoudre le même exercice.
    Peux tu décrire comment t'es arrive a gérer la partie (wxyz) ?

    Cdt.

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

Discussions similaires

  1. Formater un message avec java
    Par JeanNoel53 dans le forum NetBeans
    Réponses: 5
    Dernier message: 30/11/2011, 11h57
  2. meilleure base de données avec java
    Par mial dans le forum JDBC
    Réponses: 11
    Dernier message: 10/11/2010, 11h49
  3. [JAVA et XML] Message XML avec paramètre JAVA
    Par MiJack dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 09/11/2005, 10h22
  4. Réponses: 3
    Dernier message: 27/01/2004, 16h15
  5. [JNDI] Equivalent avec Java Web Start ?
    Par cameleon2002 dans le forum Java EE
    Réponses: 8
    Dernier message: 18/09/2003, 18h55

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