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

Java Discussion :

Enigma machine disque


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut Enigma machine disque
    Bonjour a tous,

    Je travaille sur un project sur la machine Enigma. Un des exercise demande de changer sur un disque les lettres d'une place vers la gauche(je crois)

    Mon disque s'appelle Rotor1 et voici dessous sa description:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     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'}};
    Si mon code fonctionne comme demander, Rotor1 dois changer comme ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {{'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', 'A'}, 
                                     {'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', 'G'}};
    Ci-dessous est mon code pour que Rotor1 permute d'une place:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void rotateRotor(char[][] aRotor)
        {
         int row = rotor1[0][1];
         int col = rotor1[1][0];
         for(row = 0; row < aRotor.length; row++)
         {    
            for(col = 0; col < aRotor[row].length; col++)    
            {  
              rotor1 = aRotor[row][col];
            } 
         }
    Je dois tester le code comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EnigmaMachine em = new EnigmaMachine();
    em.rotateRotor(em.getRotor1());
    Mais bien evidement quand je teste le code rien ne se passe.

    Est-ce quelqu'un aurrais une idee du problem

  2. #2
    Membre éprouvé Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Par défaut
    Citation Envoyé par cyrodil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         int row = rotor1[0][1];
         int col = rotor1[1][0];
    C'est bizarre : tu calcules tes index à partir du contenu de ton tableau ??? rotor1[0][1] vaut 'B' c'est à dire 66 ??? Tu es sûr que rien ne se passe, pas d'exception ?

    Le tableau est pratique pour stocker un ensemble de valeurs mais pas pour les déplacer, il vaudrait mieux une liste comme LinkedList (pour des insertions, suppressions à différentes positions).

  3. #3
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    En restant dans ton code complexe des tableaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void rotateRotor(char[][] aRotor)
        {
         char carry;
         for(int row = 0; row < aRotor.length; row++)
         {    
            carry=aRotor[0];
            for(int col = 1; col < aRotor[row].length; col++)    
            {  
              aRotor[row][col-1]=aRotor[row][col];
            }
            aRotor[row][col-1]=carry;
         }

  4. #4
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut
    Cher jean.2edi,

    Malheureusement sur cet exercise je ne peux pas utiliser LinkedList, ce n'est pas dans mon cours

    Merci encore pour ton aide

    Citation Envoyé par jean.2edi Voir le message
    C'est bizarre : tu calcules tes index à partir du contenu de ton tableau ??? rotor1[0][1] vaut 'B' c'est à dire 66 ??? Tu es sûr que rien ne se passe, pas d'exception ?

    Le tableau est pratique pour stocker un ensemble de valeurs mais pas pour les déplacer, il vaudrait mieux une liste comme LinkedList (pour des insertions, suppressions à différentes positions).

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut
    Cher Lorantus,

    Quand je compile ce code, un message d'error s'affiche sur la ligne carry = aRotor[0];

    le message d'error est le suivant : imcompatible type. found char[] but expected char




    Citation Envoyé par Lorantus Voir le message
    En restant dans ton code complexe des tableaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void rotateRotor(char[][] aRotor)
        {
         char carry;
         for(int row = 0; row < aRotor.length; row++)
         {    
            carry=aRotor[0];
            for(int col = 1; col < aRotor[row].length; col++)    
            {  
              aRotor[row][col-1]=aRotor[row][col];
            }
            aRotor[row][col-1]=carry;
         }

  6. #6
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    Autant pou rmoi, j'ai pas fais de complie sur ce source -j'ai donné à titre d'info...

    comme dis l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char carry=aRotor[row][0];
    Mais, bon, on sait tous que tu as corriger cela par toi même... dans le cadre de ton exercice, dont la réponse dépasse de loin le copier-coller.

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut
    Cher Lorantus,

    Merci encore pour ton aide

    Je debute avec Java, le cours que je prends actuellement est vraiment trop pauvre

    J'ai recorriger mon code, mais quand je vais dans inspector mon array ne bouge pas, c'est toujours en position [0] avec la lettre A



    Citation Envoyé par Lorantus Voir le message
    Autant pou rmoi, j'ai pas fais de complie sur ce source -j'ai donné à titre d'info...

    comme dis l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char carry=aRotor[row][0];
    Mais, bon, on sait tous que tu as corriger cela par toi même... dans le cadre de ton exercice, dont la réponse dépasse de loin le copier-coller.

  8. #8
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    Ce programme fonctionne, si j'ai bien compris ton pb de permutation.

    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
    public class Main {
        private static 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 static void main(String[] args) {
            rotateRotor(rotor1);
        }
     
        public static void rotateRotor(char[][] aRotor) {
            for (int row = 0; row < aRotor.length; row++) {
                char carry = aRotor[row][0];
                for (int col = 1; col < aRotor[row].length; col++) {
                    aRotor[row][col - 1] = aRotor[row][col];
                }
                aRotor[row][aRotor[row].length - 1] = carry;
            }
        }
    }

  9. #9
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut
    Je suis desoler Lorantus de perdre ton temps

    J'ai appeler mon prof et il m'a dis que je n'avais pas a implenter un nested loop, un For suffit car je ne travaille pas avec une 2D array.

    Il a precise aussi peut-etre de tester que 'A' est egal a la lettre suivante, ainsi de suite jusqu'a ce que 'Z' egal 'A'.

    Alors j'ai rechange mon code mais avec l'aide du tien, je nage dans la soupe cela ne fonctionne toujours pas

    public void rotateRotor(char[][] aRotor)
    {
    char temp;
    int i = 0;
    if (aRotor == null && aRotor.length > 0)
    {
    throw new IllegalArgumentException("invalid rotor");
    }
    for (i = 0; i < aRotor.length - 1; i++)
    {
    aRotor[i] = aRotor[i+1];
    }
    temp = aRotor[i][0];
    aRotor[i][aRotor[i].length - 1] = temp;
    }
    }

  10. #10
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut


    Je comprends pas là :
    Il a precise aussi peut-etre de tester que 'A' est egal a la lettre suivante, ainsi de suite jusqu'a ce que 'Z' egal 'A'.
    Regarde ton code, il posséde bcps d'erreurs:
    public void rotateRotor(char[][] aRotor)
    {
    char temp;
    int i = 0;
    //Comment être .length>0 ET avoir == null ?
    if (aRotor == null && aRotor.length > 0)
    {
    throw new IllegalArgumentException("invalid rotor");
    }
    for (i = 0; i < aRotor.length - 1; i++)
    {
    aRotor[i] = aRotor[i+1];
    }
    //Il s'agit d'un tableau 1D : aRotor[i][0] devient aRotor[0] etc
    temp = aRotor[i][0];
    aRotor[i][aRotor[i].length - 1] = temp;
    }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static void rotateRotor1D(char[] aRotor) {
            char temp;
            int i = 0;
            if (aRotor == null || aRotor.length < 1) {
                throw new IllegalArgumentException("invalid rotor");
            }
     
            temp = aRotor[0];
            for (i = 0; i < aRotor.length - 1; i++) {
                aRotor[i] = aRotor[i + 1];
            }
            aRotor[aRotor.length - 1] = temp;
        }

  11. #11
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut
    Ok, je crois que j'ai compris. La bonne blague c'est que j'habite en Irlande et je suis a ma seconde annee avec java et le cour est en anglais. Donc il est difficile desfois de comprendre ce qu'ils demandent

    Mais je m'accroche

    L'exercise donne le titre de ma methode: public static void rotateRotor1D(char[][] aRotor) donc si j'ai bien compris [][] veut dire une 2D array? j'ai relu l'exercise, je dois changer la ligne 0 qui:

    {'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'}

    Mais je ne change pas la deuxieme:

    {'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'}

    (mille excuse persuade qu'il fallait changer les deux lignes, c'est pour cela que ma premiere citation avait un nested loop)

    Donc au telephone j'ai rien compris a ce que le prof m'a dit en plus il a un fort accent du sud de l'Irlande

    Je suis desole, si t'abandonne je comprendrais

  12. #12
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    L'exercise donne le titre de ma methode: public static void rotateRotor1D(char[][] aRotor) donc si j'ai bien compris [][] veut dire une 2D array ?
    Oui, enfin, là, c'est moi qui decide de l'appeler 1D ou 2D... 1D : 1 dimension / 2D : deux dimensions (ou indices) etc.

    Avec cela, tu as tous les éléments necessaires:
    L'appel de rotateRotor(char[][]) avec un rotor en char[][]...
    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
     
    public class Main {
        private static 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'}};
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            rotateRotor(rotor1);
        }
     
        public static void rotateRotor(char[][] aRotor) {
            if (aRotor == null || aRotor.length < 1) {
                throw new IllegalArgumentException("invalid rotor");
            }
     
            rotateRotor1D(aRotor[0]);
        }
     
        public static void rotateRotor1D(char[] aRotor) {
            if (aRotor == null || aRotor.length < 1) {
                throw new IllegalArgumentException("invalid rotor");
            }
     
            char temp = aRotor[0];
            for (int i = 0; i < aRotor.length - 1; i++) {
                aRotor[i] = aRotor[i + 1];
            }
            aRotor[aRotor.length - 1] = temp;
        }
     
        public static void rotateRotor2D(char[][] aRotor) {
            for (int row = 0; row <
                    aRotor.length; row++) {
                char carry = aRotor[row][0];
                for (int col = 1; col <
                        aRotor[row].length; col++) {
                    aRotor[row][col - 1] = aRotor[row][col];
                }
     
                aRotor[row][aRotor[row].length - 1] = carry;
            }
     
        }
    }
    Je ne pourrai pas faire mieux.

  13. #13
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 53
    Par défaut
    Merci encore Lorantus pour ton aide

Discussions similaires

  1. [WMI] répertorier les disques d'une machine
    Par guillaume16 dans le forum Windows
    Réponses: 5
    Dernier message: 17/11/2008, 17h14
  2. image disque machine
    Par c-top dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 05/06/2007, 12h02
  3. transférer le disque dur d'une machine vers une autre
    Par julien.63 dans le forum Debian
    Réponses: 2
    Dernier message: 16/03/2007, 14h39
  4. [Disque dur]Trois disques durs dans une même machine.
    Par Scurz dans le forum Composants
    Réponses: 24
    Dernier message: 25/08/2006, 18h19
  5. Comment connaitre les disques dur d'une machine dans un code ?
    Par GeekettePower dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2006, 00h43

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