Cryptographie de César
psy
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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
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
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
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
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.
@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