Cryptographie de César

Fermé
psy - Modifié le 4 oct. 2017 à 19:01
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 6 oct. 2017 à 15:49
Bonjour,
j'ai un problème avec mon code il n prend pas en compte l'espace
qui peut m'aider svp
voici le code ci dessous

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 ;
                aCoder = aCoder.toLowerCase();
             
               for(int i=0;i<aCoder.length();i++)
        { 
             int positionChar = ALPHABET.indexOf(aCoder.charAt(i));

             int valeurClef = (DECALAGE+positionChar)%26;

             char replaceVal = ALPHABET.charAt(valeurClef);

             chaineCodee += replaceVal;   

         }
        
        /*******************************************
        * 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);
        }
    }
}

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 4 oct. 2017 à 17:25
Salut psy,

Tu vas avoir le même problème avec les caractères accentués, les virgules, les points, etc.

Tu ne peux pas chiffrer ces caractères, car tu n'as pas le choix de l'alphabet à prendre en compte (la String ALPHABET).

Dès lors, tu pourrais :

1- refuser de chiffrer une chaîne comportant des caractères non présents dedans,

ou

2- alerter l'utilisateur en lui indiquant que des caractères non chiffrables sont contenus et: (a) retirer les caractères non présents dans la String ALPHABET du résultat chaineCodee, en lui disant ce que tu as fait; ou (b) si le caractère à chiffrer n'est pas dans la liste des caractères présents dans la String ALPHABET, tu ne le chiffres pas, et tu l'ajoutes tel quel à chaineCodee, en disant à l'utilisateur que ces caractères n'ont pas été chiffrés.


Dal
0
Merci Dal pour votre contribution mais pouvez être beaucoup plus explicite j'ai essayé de suivre tes remarques mais toujours rien je ne sais pas tenir les autres caractères
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > Psy
6 oct. 2017 à 14:59
Bonjour,

Dal l'a expliqué : "Tu ne peux pas chiffrer ces caractères"
Pour y arriver il faudrait modifier du code ailleurs que là où tu as le droit de le faire...

La seule chose que tu peux faire c'est indiquer à l'utilisateur qu'il n'a pas le droit de prendre ces caractères, mais dans tous les cas ça ne les chiffrera pas.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 6 oct. 2017 à 16:23
@KX: merci !

@Psy: c'est visiblement un exercice que tu fais, alors si on le fait à ta place on ne te rend pas vraiment service. Cela dit, voilà une indication complémentaire qui devrait te mettre sur la piste : pour tester si le caractère que tu veux chiffrer est dans ALPHABET ou pas, tu peux utiliser la valeur de retour de la méthode indexOf, qui va retourner -1 si le caractère n'est pas présent dans la chaîne

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf%28int%29

ensuite, tu décides ce que ton programme va faire selon la stratégie que tu auras choisit pour traiter ton problème : renvoyer une erreur et arrêter de chiffrer, ou ajouter les caractères non chiffrables tels quels à chaineCodee, en disant à l'utilisateur que ces caractères n'ont pas été chiffrés.

(ou toute autre option que tu choisiras en l'absence de pré-requis particuliers ou d'indications de ton enseignant sur cette question)

mais déjà, la première chose à faire est de détecter le problème, afin que le résultat que tu prétends être une chaîne chiffrée soit exact, au lieu de traiter les -1 comme étant une valeur que tu utilises pour calculer valeurClef avec ton DECALAGE (ce qui n'a pas de sens), comme tu le fais actuellement dans ton code.

Est-ce plus clair ?

Dal
0