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

Langage Java Discussion :

Convertir un char[][] en string


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut Convertir un char[][] en string
    Bonjour a tous,

    Je dois creer une method appele:

    public String codeMessage(String message)

    My methode dois decoder le message par example:

    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    pour

    "NOPQRSTUVWXYZABCDEFGHIJKLM"

    Dans mon program j'ai cree une methode passant dans chaque rotors appele passThruRotorsAndReflect(char letter), et result en donnant la lettre final decoder. Par example si l'utilisateur tape 'A' passe dans chaque disque et result en donnant la lettre 'N'

    Le problem de la nouvelle method est que je dois changer l'argument message qui est une string en char si je veux reutiliser ma method passThruRotorsAndReflect(char letter), mais je ne vois pas comment.

    En dessous ces mes rotors et reflector:

    rotor1
    {{'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'},
    {'G', 'T', 'U', 'B', 'Z', 'Y', 'V', 'J', 'L', 'K', 'S', 'A', 'W', 'X', 'H', 'C', 'D', 'E', 'M', 'N', 'O', 'P', 'Q', 'R', 'I', 'F'}};

    rotor2
    {{'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'},
    {'L', 'C', 'D', 'G', 'Y', 'U', 'B', 'Z', 'S', 'V', 'J', 'E', 'M', 'A', 'W', 'X', 'H', 'N', 'O', 'P', 'Q', 'R', 'I', 'F', 'T', 'K'}};

    rotor3
    {{'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'},
    {'S', 'V', 'J', 'E', 'M', 'W', 'X', 'L', 'N', 'A', 'B', 'H', 'C', 'O', 'P', 'Q', 'R', 'I', 'F', 'Y', 'D', 'G', 'T', 'U', 'Z', 'K'}};

    reflector
    {{'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'},
    {'Y', 'R', 'U', 'H', 'Q', 'S', 'L', 'D', 'P', 'X', 'N', 'G', 'O', 'K', 'M', 'I', 'E', 'B', 'F', 'Z', 'C', 'W', 'V', 'J', 'A', 'T'}};

    Je trouve ce program tres complique

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut pardon
    J'ai oublier de mettre mes codes.

    Ci-dessous le code pour la method passThruRotorsAndReflect(char letter)

    public char passThruRotorsAndReflect(char letter)
    {
    int i = 0;
    char result = getCodeFor(letter, rotor1);
    char result1 = getCodeFor(result, rotor2);
    char result2 = getCodeFor(result1, rotor3);
    char backward1 = getDecodeFor(result2, reflector);
    char backward2 = getDecodeFor(backward1, rotor3);
    char backward3 = getDecodeFor(backward2, rotor2);
    {
    this.getCodeFor(letter, rotor1);
    rotor2[0][i] = result;
    this.getCodeFor(result, rotor2);
    rotor3[0][i] = result1;
    this.getCodeFor(result1, rotor3);
    reflector[0][i] = result2;
    this.getCodeFor(result2, reflector);
    rotor3[0][i] = backward1;
    this.getDecodeFor(backward1, rotor3);
    rotor2[0][i] = backward2;
    this.getDecodeFor(backward2, rotor2);
    rotor1[0][i] = backward3;
    this.getDecodeFor(backward3, rotor1);
    }

    return getDecodeFor(backward3, rotor1);
    }

    Et voici ma nouvelle method miserable

    public String codeMessage(String message)
    {
    {
    this.passThruRotorsAndReflect(message)
    }
    return passThruRotorsAndReflect(message);
    }

    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    En fait, ce que tu veux, c'est itérer sur chaque caractère de ton message pour avoir le caractère associé via ta méthode passThruRotorsAndReflect ?

    Dans ce cas, soit :

    • Tu utilises la méthode toCharArray() sur ton message pour avoir l'ensemble des caractères dans un tableau
    • Tu utilises la méthode charAt(int index) pour obtenir le caractère situé à la position index.

    Pour l'itération, il suffit ensuite d'appeler la méthode length() pour avoir la longueur de ta chaine.

    Si c'est autre chose, n'hésites pas à demander.

    Au passage, utilises la balise pour présenter ton code, c'est plus lisible pour nous

    Bon code

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    Je debute en Java, donc ne sois pas choque par mes codes.

    Pour commencer j'ai tape ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char rotor1[][] = message.ToCharArray();
    Mais je recois une syntax error: cannot find symbol. message ToCharArray()


  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    Autant pour moi j'ai mal epeler toChar

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Pas de soucis, on a tous débuté un jour.

    Il y a deux erreurs dans ce code :


    • La première c'est que la méthode s'appelle toCharArray() et non ToCharArray()
    • La seconde, c'est que tu reçois un tableau de caractères à une dimension et non deux dimensions.

    Voici un exemple simplifié avec deux méthodes :
    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
     
        public char passThruRotorsAndReflect(char letter) {
            return letter;
        }
     
        public String codeMessage(String message) {
            StringBuffer sb = new StringBuffer();
            for (int i=0;i<message.length();i++) {
                sb.append(passThruRotorsAndReflect(message.charAt(i)));
            }
            return sb.toString();
        }
     
        public String codeMessage2(String message) {
            StringBuffer sb = new StringBuffer();
            char[] letters = message.toCharArray();
            for (int i=0;i<letters.length;i++) {
                sb.append(passThruRotorsAndReflect(letters[i]));
            }
            return sb.toString();
        }

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par cyrodil Voir le message
    Autant pour moi j'ai mal epeler toChar

    Merci encore Jeremy pour ton aide

    J'espere que j'ai compris voici mon code:

    public String codeMessage(String message)
    {
    StringBuffer sb = new StringBuffer();
    char[] rotor = message.toCharArray();
    for (int i=0;i < rotor.length;i++)
    {
    sb.append(passThruRotorsAndReflect(rotor[i]));
    }
    return sb.toString();
    }

    J'ai un problem avec rotor.length(), il me renvoi une syntax error qu'il ne reconnais pas length(), donc j'ai changer avec juste length, ca fonctionne mais j'espere que cela ne va pas affecter le resultat.

    Ensuite j'ai tester mon code mais le resultat est plus que bizarre

    "NPEQCEKWXFG!OGMBDUV!RSHISS" au lieu de

    "NOPQRSTUVWXYZABCDEFGHIJKLM"


    Mais la premiere lettre est OK c'est deja ca

    J'espere que je n'ai pas fait d'erreur dans mon code

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    Je crois que ma method passThruRotorsAndReflect() est incorrect, je viens juste de la retester et si tu tape 'A' en retour j'ai la lettre 'N' ce qui est correcte mais si je tape 'N' il me retourne 'G' au lieu de 'A'

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par cyrodil Voir le message
    J'ai un problem avec rotor.length(), il me renvoi une syntax error qu'il ne reconnais pas length(), donc j'ai changer avec juste length, ca fonctionne mais j'espere que cela ne va pas affecter le resultat.
    C'est normal, si tu travailles sur un String, pour récupérer la longueur, c'est une méthode length() tandis que sur un tableau c'est une variable length

    Pour ce qui est de ta méthode, j'avoue que j'ai pas cherché à comprendre ce qu'elle doit faire vu que c'était pas le but du post initial, mais si tu m'expliques ce que tu veux concrètement, je peux t'aider

    Je vais me balader et profiter du soleil, je serais de retour en fin d'après midi.

    En attendant, bon courage

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    Tu a bien raison de profiter du beau temps apres l'hiver rude qu'on a eu

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Balade terminée

    J'ai regardé rapidement, en fait, tu veux faire un système de correspondance avec des tableaux de char?

    J'ai fais une petite classe avec une seule correspondance (via le tableau rotor1)

    Par contre j'ai mis du code vérification pour valider le tableau rotor passé. Si tu es sur que ce tableau est valide, alors squizze les vérifications.


    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
     
    public class Rotor {
     
        static final char[][] rotor1 =
        {
            {'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'},
            {'G', 'T', 'U', 'B', 'Z', 'Y', 'V', 'J', 'L', 'K', 'S', 'A', 'W', 'X', 'H', 'C', 'D', 'E', 'M', 'N', 'O', 'P', 'Q', 'R', 'I', 'F'}
        };
     
        public char getCode(char letter,char[][] rotor) {
            char result = letter;
            if (rotor !=null && rotor.length == 2) {
                char[] srotor = rotor[0];
                char[] erotor = rotor[1];
                if (srotor.length == erotor.length) {
                    for (int i=0;i<srotor.length;i++) {
                        if (letter == srotor[i]) {
                            result = erotor[i];
                            break;
                        }
                    }
                }
            }
            return result;
        }    
     
        public char passThruRotorsAndReflect(char letter) {
            return getCode(letter,rotor1);
        }
     
        public String codeMessage(String message) {
            StringBuffer sb = new StringBuffer();
            for (int i=0;i<message.length();i++) {
                sb.append(passThruRotorsAndReflect(message.charAt(i)));
            }
            return sb.toString();
        }
     
        public static void main(String[] args) {
            Rotor r = new Rotor();
            String message = "HELLO";
            System.out.println(r.codeMessage(message));
        }
     
    }
    Dis moi si c'est ce que tu veux ou si tu as besoin de plus d'informations.

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    J'ai deja creer une methode getCodeFor(), qui fonctionne ce qui est un miracle.

    Alors la methode passThruRotorsAndReflect() va passer une lettre dans rotor1,2,3 et le reflector qui va etre ensuite decoder en remontant par rotor3,2,1.

    Par example: 'A' encode donne 'G' dans rotor1, 'G' encode donne 'B' dans rotor2, 'B' encode donne 'V' dans rotor3, 'V' encode donne 'W', 'W' decode donne 'F' dans rotor3, et tu continue jusqu'a rotor1 ce qui donne 'N'.

    Ca fonctionne pour 'A' retour 'N' mais pas pour 'N' retour 'A', ce qui est etrange puisque c'est le meme parcours.

    Ci-dessous sont mes methodes pour encode et decode, qui m'ont poser aucun problem:

    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
     
    public char getCodeFor(char uncodedLetter, char[][] aRotor)
       {
          if (aRotor == null || aRotor.length != 2 || aRotor[0].length != aRotor[1].length) 
          {
              throw new IllegalArgumentException("invalid rotor");
          }
             for (int i = aRotor[0].length-1; i >= 0; i--) 
             {
                if (aRotor[0][i] == uncodedLetter) 
                {
                    return aRotor[1][i];
                }
             }
             return '!';
       }
    Et voici decode:

    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
     
    public char getDecodeFor(char codedLetter, char[][] aRotor)
       {
          if (aRotor == null || aRotor.length != 2 || aRotor[0].length != aRotor[1].length) 
          {
              throw new IllegalArgumentException("invalid rotor");
          }
             for (int i = aRotor[0].length-1; i >= 0; i--) 
             {
                if (aRotor[1][i] == codedLetter) 
                {
                    return aRotor[0][i];
                }
             }
             return '!';
         }
    Je suis un peu perdu, j'espere que mes methodes sont correctes

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    J'ai adapté mon programme pour faire ca avec tes 4 tableaux et ça marche niquel, voila le code complet :

    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
    82
    83
    84
    85
    86
    87
    public class Rotor {
     
        static final char[][] rotor1 =
        {
            {'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'},
            {'G', 'T', 'U', 'B', 'Z', 'Y', 'V', 'J', 'L', 'K', 'S', 'A', 'W', 'X', 'H', 'C', 'D', 'E', 'M', 'N', 'O', 'P', 'Q', 'R', 'I', 'F'}
        };
     
        static final char[][] rotor2 =
        {
            {'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'},
            {'L', 'C', 'D', 'G', 'Y', 'U', 'B', 'Z', 'S', 'V', 'J', 'E', 'M', 'A', 'W', 'X', 'H', 'N', 'O', 'P', 'Q', 'R', 'I', 'F', 'T', 'K'}
        };
     
        static final char[][] rotor3 =
        {
            {'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'},
            {'S', 'V', 'J', 'E', 'M', 'W', 'X', 'L', 'N', 'A', 'B', 'H', 'C', 'O', 'P', 'Q', 'R', 'I', 'F', 'Y', 'D', 'G', 'T', 'U', 'Z', 'K'}
        };
     
        static final char[][] reflector =
        {
            {'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'},
            {'Y', 'R', 'U', 'H', 'Q', 'S', 'L', 'D', 'P', 'X', 'N', 'G', 'O', 'K', 'M', 'I', 'E', 'B', 'F', 'Z', 'C', 'W', 'V', 'J', 'A', 'T'}
        };
     
        // 'A' encode donne 'G' dans rotor1, 'G' encode donne 'B' dans rotor2, 'B' encode donne 'V' dans rotor3, 'V' encode donne 'W'
     
        public char getLetter(char letter,char[][] coresp,boolean encode) {
            char result = letter;
            if (coresp !=null && coresp.length == 2) {
                char[] scoresp = encode?coresp[0]:coresp[1];
                char[] ecoresp = encode?coresp[1]:coresp[0];
                if (scoresp.length == ecoresp.length) {
                    for (int i=0;i<scoresp.length;i++) {
                        if (letter == scoresp[i]) {
                            result = ecoresp[i];
                            break;
                        }
                    }
                }
            }
            return result;
        }
     
        public char encode(char letter,char[][] coresp) {
            return getLetter(letter,coresp,true);
        }
     
        public char decode(char letter,char[][] coresp) {
            return getLetter(letter,coresp,false);
        }
     
        public char encode(char letter) {
            return encode(encode(encode(encode(letter,rotor1),rotor2),rotor3),reflector);
        }
     
        public char decode(char letter) {
            return decode(decode(decode(decode(letter,reflector),rotor3),rotor2),rotor1);
        }
     
        public String encodeMessage(String message) {
            StringBuffer sb = new StringBuffer();
            for (int i=0;i<message.length();i++) {
                sb.append(encode(message.charAt(i)));
            }
            return sb.toString();
        }
     
        public String decodeMessage(String message) {
            StringBuffer sb = new StringBuffer();
            for (int i=0;i<message.length();i++) {
                sb.append(decode(message.charAt(i)));
            }
            return sb.toString();
        }
     
        public static void main(String[] args) {
            Rotor r = new Rotor();
            String message = "HELLO";
            String encodedMessage = r.encodeMessage(message);
            String decodedMessage = r.decodeMessage(encodedMessage);
            System.out.println("Encode de " + message +" = " + encodedMessage);
            System.out.println("Decode de " + encodedMessage +" = " + decodedMessage);
        }
     
    }
    Me produit ça en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Encode de HELLO = LRDDN
    Decode de LRDDN = HELLO
    Au passage, pas besoin de faire 2 fonctions pour encoder et décoder des lettres, c'est mieux d'en faire une seule avec un paramètre qui indique si c'est un encodage / décodage. De plus, de manière générale, il faut éviter les multiples return dans une fonction pour la simplicité / lisibilité de ta méthode.

    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
        public char getLetter(char letter,char[][] coresp,boolean encode) {
            char result = letter;
            if (coresp !=null && coresp.length == 2) {
                char[] scoresp = encode?coresp[0]:coresp[1];
                char[] ecoresp = encode?coresp[1]:coresp[0];
                if (scoresp.length == ecoresp.length) {
                    for (int i=0;i<scoresp.length;i++) {
                        if (letter == scoresp[i]) {
                            result = ecoresp[i];
                            break;
                        }
                    }
                }
            }
            return result;
        }
    Hésites pas si ca marche toujours pas avec ton code

    Au passage, tes méthodes pour décoder / encoder fonctionne très bien. A mon avis, c'est plutôt dans leurs appels respectifs sur les différents tableaux rotor / reflector qu'il doit y avoir un problème.

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    Ah je prendrais ton code avec plaisir, mais l'horror dans l'histoire c'est que chaque method que j'ai creer je ne peux pas changer le titre de la methode, ce sont celle que je dois suivre pour chaque exercise. Aussi il demande de creer 2 methodes, une pour encode et une pour decode

    Je suis desole pour la prise de tete Jeremy

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Pas de soucis, si c'est vraiment primordial de garder tes deux méthodes, tu peux faire une méthode générique qui te donne la lettre en fonction de l'encodage / décodage via un paramètre et d'un rotor. Te suffiras d'appeler par la suite cette méthode dans les deux méthodes "imposées" en changeant le paramètre encode / decode (exactement comme j'ai fais dans mon code)

    Ce qui m'étonne par contre c'est que tu ne possèdes qu'une seule méthode qui fait l'encodage / décodage (passThruRotorsAndReflect)

    Il t'en faut une qui le fait dans l'autre sens pour le décodage. Tu peux me la montrer?

  16. #16
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    J'ai retester mon code pour passThruRotorsAndReflect(), et toutes les lettres retourne la bonne reponse excepter pour 'N', donc ma methode fonctionne bien sauf pour 'N', c'est vraiment bizare

    Oui dans la methode passThruRotorsAndReflect(), j'ai la methode getCodeFor() et la method getDecodeFor(); (si j'ai compris ta question

    Je suis sur que c'est une petite faute dans mon code, pourquoi est-ce que ca fonctionne parfaitement pour toute les lettres de l'alphabet et pas 'N'

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Affiche moi le code complet de ta classe parce que tes deux méthodes fonctionnent bien avec la lettre N et les autres (getCodeFor / getDecodeFor)

  18. #18
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Crossnine
    Affiche moi le code complet de ta classe parce que tes deux méthodes fonctionnent bien avec la lettre N et les autres (getCodeFor / getDecodeFor)
    Oui ca fonctionne avec toute les lettres mais pas 'N'

    Voici mon code:
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    import ou.*;
    import java.util.Arrays;
     
    /**
     * Write a description of class EnigmaMachine here.
     * 
     * @author (Erika) 
     * @version (15/02/2009)
     */
    public class EnigmaMachine
    {     
          private char[][] rotor1 = {{'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'}, 
                                     {'G', 'T', 'U', 'B', 'Z', 'Y', 'V', 'J', 'L', 'K', 'S', 'A', 'W', 'X', 'H', 'C', 'D', 'E', 'M', 'N', 'O', 'P', 'Q', 'R', 'I', 'F'}};
     
          private char[][] rotor2 = {{'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'}, 
                                      {'L', 'C', 'D', 'G', 'Y', 'U', 'B', 'Z', 'S', 'V', 'J', 'E', 'M', 'A', 'W', 'X', 'H', 'N', 'O', 'P', 'Q', 'R', 'I', 'F', 'T', 'K'}};
     
          private char[][] rotor3 = {{'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'}, 
                                     {'S', 'V', 'J', 'E', 'M', 'W', 'X', 'L', 'N', 'A', 'B', 'H', 'C', 'O', 'P', 'Q', 'R', 'I', 'F', 'Y', 'D', 'G', 'T', 'U', 'Z', 'K'}};
     
          private char[][] reflector = {{'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'},
                                        {'Y', 'R', 'U', 'H', 'Q', 'S', 'L', 'D', 'P', 'X', 'N', 'G', 'O', 'K', 'M', 'I', 'E', 'B', 'F', 'Z', 'C', 'W', 'V', 'J', 'A', 'T'}};
     
        /**
        * Returns char in rotor1.
        */
       public char[][] getRotor1()
       {
          return rotor1;
       }
     
       /**
        * 
        */
       public char getCodeFor(char uncodedLetter, char[][] aRotor)
       {
          if (aRotor == null || aRotor.length != 2 || aRotor[0].length != aRotor[1].length) 
          {
              throw new IllegalArgumentException("invalid rotor");
          }
             for (int i = aRotor[0].length-1; i >= 0; i--) 
             {
                if (aRotor[0][i] == uncodedLetter) 
                {
                    return aRotor[1][i];
                }
             }
             return '!';
       }
     
     
       public char getDecodeFor(char codedLetter, char[][] aRotor)
       {
          if (aRotor == null || aRotor.length != 2 || aRotor[0].length != aRotor[1].length) 
          {
              throw new IllegalArgumentException("invalid rotor");
          }
             for (int i = aRotor[0].length-1; i >= 0; i--) 
             {
                if (aRotor[1][i] == codedLetter) 
                {
                    return aRotor[0][i];
                }
             }
             return '!';
         }
     
     
        public static void rotateRotor(char[][] aRotor) 
        {
            char first = aRotor[0][0];
            int i;
            for(i = 0; i < aRotor[0].length-1; i++)
            {
                aRotor[0][i] = aRotor[0][i+1];
            }
            aRotor[0][i] = first;
         }
     
     
         public void setRotorPosition(int rotorNumber, char key)
         {
            if(rotorNumber < 1 && rotorNumber > 3)
            {
               OUDialog.alert("Incorrect rotor number");
            }
            else if(rotorNumber == 1)
            {
               for(int i = 0; i < key; i ++)
               {
                  rotor1[0][0] = key;
               }
             }
             else if(rotorNumber == 2)
             {
               for(int i = 0; i < key; i ++)
               {
                  rotor2[0][0] = key;
               }
             }
             else if(rotorNumber == 3)
             {
               for(int i = 0; i < key; i ++)
               {
                  rotor3[0][0] = key;
               }
             }   
          }
     
     
     
          public char passThruRotorsAndReflect(char letter)
          {
             int i = 0;
             char result = getCodeFor(letter, rotor1);
             char result1 = getCodeFor(result, rotor2);
             char result2 = getCodeFor(result1, rotor3);
             char backward1 = getDecodeFor(result2, reflector);
             char backward2 = getDecodeFor(backward1, rotor3);
             char backward3 = getDecodeFor(backward2, rotor2);
             {
             this.getCodeFor(letter, rotor1);
             rotor2[0][i] = result;
             this.getCodeFor(result, rotor2);
             rotor3[0][i] = result1;
             this.getCodeFor(result1, rotor3);
             reflector[0][i] = result2;
             this.getCodeFor(result2, reflector);
             rotor3[0][i] = backward1;
             this.getDecodeFor(backward1, rotor3);
             rotor2[0][i] = backward2;
             this.getDecodeFor(backward2, rotor2);
             rotor1[0][i] = backward3;
             this.getDecodeFor(backward3, rotor1);
             }
     
             return getDecodeFor(backward3, rotor1);
          }
     
     
     
          public String codeMessage(String message)
          {
            StringBuffer sb = new StringBuffer();
            char[] rotor = message.toCharArray();
            for (int i=0;i < rotor.length;i++) 
            {
               sb.append(passThruRotorsAndReflect(rotor[i]));
            }
            return sb.toString();
         }
     
       }
    On vois bien que je n'ai pas fait le code le plus simple

  19. #19
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Points : 15
    Points
    15
    Par défaut
    J'espere que j'ai bien poste ce que tu as demande

    Je suis desole mais je dois quitter le forum pour ce soir, je serrais la demain toute la journee et soiree.

    Jeremy mille merci encore pour ton aide

    Tres bonne soiree

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    A quoi te sert ce code la ? Parce qu'en le commentant, ca marche niquel ...

    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
     
     
            {
                this.getCodeFor(letter, rotor1);
                rotor2[0][i] = result;
                this.getCodeFor(result, rotor2);
                rotor3[0][i] = result1;
                this.getCodeFor(result1, rotor3);
                reflector[0][i] = result2;
                this.getCodeFor(result2, reflector);
                rotor3[0][i] = backward1;
                this.getDecodeFor(backward1, rotor3);
                rotor2[0][i] = backward2;
                this.getDecodeFor(backward2, rotor2);
                rotor1[0][i] = backward3;
                this.getDecodeFor(backward3, rotor1);
            }
    Je vois pas l'utilité de faire un getCodeFor / getDecodeFor si tu ne le stockes pas. Pourquoi modifier tes rotors en plus ?


    En utilisant cette méthode main et en commentant le code cité au dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public static void main(String[] args) {
            EnigmaMachine r = new EnigmaMachine();
            System.out.println("A --> " +  r.passThruRotorsAndReflect('A'));
            System.out.println("N --> " + r.passThruRotorsAndReflect('N'));
            System.out.println("B --> " + r.passThruRotorsAndReflect('B'));
            System.out.println("P --> " + r.passThruRotorsAndReflect('P'));
            System.out.println("C --> " + r.passThruRotorsAndReflect('C'));
            System.out.println("E --> " + r.passThruRotorsAndReflect('E'));
        }
    J'obtient ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A --> N
    N --> A
    B --> P
    P --> B
    C --> E
    E --> C

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

Discussions similaires

  1. Convertir Char* en String
    Par Blunt dans le forum C++/CLI
    Réponses: 1
    Dernier message: 01/07/2007, 16h46
  2. Convertir char* en string
    Par KorTeX22 dans le forum C++
    Réponses: 5
    Dernier message: 13/03/2007, 11h54
  3. Convertir un Char* en string
    Par DEVfan dans le forum C++
    Réponses: 4
    Dernier message: 05/01/2007, 16h15
  4. convertir un char * en std::string
    Par benahpets dans le forum SL & STL
    Réponses: 12
    Dernier message: 01/05/2006, 17h15
  5. convertir un char * en string
    Par Seij dans le forum C++
    Réponses: 5
    Dernier message: 08/03/2006, 22h23

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