Code César Java's cool

Fermé
Manelise Messages postés 4 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 4 avril 2013 - 28 mars 2013 à 11:49
Manelise Messages postés 4 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 4 avril 2013 - 4 avril 2013 à 19:19
Bonjour,
Nous avons un projet en ISN (Informatique et Science du Numérique) en Terminale S. Nous voulons coder un texte court en décalant l'alphabet (principe de Code César).
Voici notre programme :

String Codage (String message) {
char [] ALPHA = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char [] messageCode = message.toCharArray() ;
for (int i=0; i < messageCode.length; i++)
{
for (int j=0; j < 26; j++)
{
if(messageCode[i] == ALPHA[j]);
{
j+=3;
if(j>=26)
{
j-=26;
}
messageCode[i]= ALPHA[j];
}
}
}

return new String(messageCode);
}




void main(){
println ("rentrer texte à coder");
String message = readString () ;
message=Codage(message);
println ( message );
}

Quand on le fait fonctionner il affiche seulement des Z.
Nous n'arrivons pas à comprendre pourquoi.
Merci d'avance.

A voir également:

2 réponses

khrogos Messages postés 49 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 10 juillet 2013 21
28 mars 2013 à 20:52
oula, ça fait compliqué pour pas grand chose ;-)
pour un chiffrement cesar, je verrais plus un truc conmme ça :

String encode(String message){
    // on recupere le message
    char[] m = message.toCharArray() ;  
    //on parcours chaque lettres
    for (int i=0;i<m.lenght;i++){
         //pour chaque lettres , on effectue un decalage de 3
         m[i] += 3;
         // si on sort de l'alphabet (valeur > à 'z')
         if (m[i] > 'z'){
             /* alors on enleve la valeur 'z' pour se retrouver au début 
               exemple : on as 'x', si on décale de trois, on devrait 
               avoir 'a', mais on se retrouve à z+1.
                alors on fait (z+1)-z, il restera 1 (qui correspond à 'a') 
                */
             m[i] -= 'z';
         }
    }
    return new String(m)
}


note : j'ai écrit au fur et a mesure, sans verifier ou compiler quoi que ce soit, c'est possible qu'en l'état ça marche pas, mais ça devrait au moins donner une piste ;-)
0
Manelise Messages postés 4 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par Manelise le 28/03/2013 à 21:39
Merci le code ne compile pas encore mais il nous donne une très grosse piste ! :-)

Nous avons une autre question, nous avions déjà trouver la fonction toCharArray dans d'autres programmes mais nous n'avions pas bien compris à quoi elle servait et comment nous pouvions l'utiliser ?
0
khrogos Messages postés 49 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 10 juillet 2013 21
28 mars 2013 à 21:59
alors, quand tu ecrit char[] m, tu dis a ton pc «Salut, je vais utiliser une variable que je vais appeler m et qui sera un tableau de char»

de même, String s veut dire «Coucou, je vais utiliser S et c'est une string !»
toCharArray est une méthode spécifique à ta variable s, et peut être traduit de l'anglais en « vers tableau de char»



donc pour faire simple, ça converti ta variable de type string en variable de type char[]

pour faire compliqué (si ça t'interesse, tu peux t'en passer mais c'est toujours bien de comprendre)
prenons une string s qui contient "Salut !"et un char[] m vide
ton string s est ce qu'on appelle un objet,
il contient une chaine de caractères ("Salut !") mais aussi d'autre trucs, des attributs (genre de variables) et est aussi capable d'exécuter des methodes (des fonctions qui lui sont propre.)

pour utiliser ces attribut et méthodes, on fait :
objet.attribut
ou
objet.methode()

par exemple m.lenght (que tu utilise dans ton code) est un attribut qui contient la taille du tableau
et s.toCharArray() va lire la chaine contenue dans la string s ("Salut !") et va la transformer en char [] pour que tu puisse ensuite la stocké dans une variable

étape par étape :
char[] m = s.toCharArray()
s va lire la chaine de caractere qu'il contient,
s va transformer la chaine de charactere en tableau de char
enfin, on envoie le tableau de char obtenu dans m.

(je sais c'est un peu brouillon, mais j'ai du mal a mettre en forme de maniere à ce que ça soit structuré, complet, et facile à comprendre en même temps ...)
0
Manelise Messages postés 4 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par Manelise le 4/04/2013 à 19:22
Merci beaucoup pour ces explications ! Elles sont très claires et surtout compréhensibles ! :-)
0