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

avec Java Discussion :

probleme sur decalage


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut probleme sur decalage
    Bonjour,

    quand je fais tourner ma boucle je ne comprend pas quand i passe de 0 a 1 la valeur de i=0 est modifie aussi
    j'ai beau faire tourner a la main je ne trouve pas l'erreur
    Si quelqu'un a une idee???

    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
    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();
           String s ="Avez-vous Vu mes 3 chats et mes 2 chiens ?";
            // la chaine a coder
            String aCoder = "";
            // la chaine codee
            String chaineCodee = "";
     
            /*******************************************
             * Completez le programme a partir d'ici.
             *******************************************/
            s.intern();
            String ALPHA=ALPHABET+" ";		
            String aCode;
            aCode=s;
     
            Pattern p = Pattern.compile("(-)|\\b!?(\\d.)|(\\p{Upper}?)|(!\\S)?|(\\W)") ;
            Matcher m = p.matcher(aCode) ; 
     
            String aCoderemplace = m.replaceAll("");
     
            aCoder=aCoderemplace;
     
     
            for(int i=0;i<aCoder.length();i++)
            {
            	for(int j=0;j<ALPHA.length();j++)
            	{      
            		if(aCoder.charAt(i) == ALPHA.charAt(j))
            		{        
     
            			if(j<22)
            			{    
              				chaineCodee=chaineCodee+aCoder.charAt(i);    
            				chaineCodee=chaineCodee.replace(chaineCodee.charAt(i), ALPHA.charAt(j+DECALAGE));	
            			}
            			if(j>22)
            			{
            				chaineCodee=chaineCodee+aCoder.charAt(i);
            				chaineCodee=chaineCodee.replace(chaineCodee.charAt(i), ALPHA.charAt((j+DECALAGE)%26));
            			}
            			if(ALPHA.charAt(26)==aCoder.charAt(i))
            			{
            				chaineCodee=chaineCodee.replace(chaineCodee.charAt(i),ALPHA.charAt(26));
            			}
            		}
            	}	
            }
     
     
            /*******************************************
             * Ne rien modifier apres cette ligne.
             *******************************************/
        	System.out.println(aCoder);
        	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);
            }
        }
    }

    Merci pour vos reponse...

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ce n'est pas clair : quand tu fais tourner ta boucle (je suppose que c'est le for(int i=0;i<aCoder.length();i++)),

    • quand i passe de 0 a 1 : i varie de 0 à aCoder.length(), la taille de la chaîne aCoder, donc effectivement i prend les valeurs 0, 1, 2, 3, etc.
    • la valeur de i=0 est modifie aussi : qu'est ce que tu appelles la valeur de "i=0" ? "i=0" est une affectation en Java, ce serait quoi la valeur d'une affectation ? Et si tu parles de la valeur de i, bah oui, elle est modifiée, puisque quand i passe de 0 à 1, i passe de 0 à 1, obviously.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut decalage
    salut

    desole pour l'imprecision

    en fait quand ma variable passe dans la premiere boucle passe de 0 à 1 puis 2 , a l'index 0 le decalage se fait passe a 1 puis 2 mais il se refait aussi pour l'index 1

    si par exemple je rentre "fuyez" au clavier il m'affiche "jccid",au lieu de "jycid".et quand je le fais pas a pas

    il passe bien le 'f 'a 'j' puis le 'u' a 'y' puis le 'y' a 'c' mais a cette etape il change aussi le 'u' en 'c'..

    je pas bien si c'est plus clair,j'espere en tout cas merci pour ta reponse. )

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu as ce problème parce que la méthode replace() remplace toutes les occurences du caractères correspondant au premier paramètre par le second caractère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( "abacada".replace('a','_'));
    affiche
    _b_c_d_
    Ainsi dans chaineCodee=chaineCodee.replace(chaineCodee.charAt(i), ALPHA.charAt(j+DECALAGE));, tu dis que le caractère situé en position i dans chaineCodee doit être remplacé par le caractère décalé, et non pas mettre en position i le caractère décalé.

    Ainsi, si on exécute pas à pas ton programme, on obtient :
    1. chaineCodee avant : f
      • on remplace tous les f par j
      • chaineCodee après : j
    2. chaineCodee avant : ju
      • on remplace tous les u par y
      • chaineCodee après : jy
    3. chaineCodee avant : jyy
      • on remplace tous les y par c
      • chaineCodee après : jcc
    4. chaineCodee avant : jcce
      • on remplace tous les e par i
      • chaineCodee après : jcci
    5. chaineCodee avant : jcciz
      • on remplace tous les z par d
      • chaineCodee après : jccid

    On voit bien pourquoi dans l'étape 3 le remplacement de y par c s'applique aussi au deuxième caractère (qui est y à cause du décalage de l'étape précédente).

    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chaineCodee=chaineCodee+aCoder.charAt(i);    
    chaineCodee=chaineCodee.replace(chaineCodee.charAt(i), ALPHA.charAt(j+DECALAGE));
    pourquoi ne pas simplement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaineCodee=chaineCodee+ALPHA.charAt(j+DECALAGE);
    Et même principe pour j>22...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 8
    Points
    8
    Par défaut replace
    Citation Envoyé par joel.drigo Voir le message
    Tu as ce problème parce que la méthode replace() remplace toutes les occurences du caractères correspondant au premier paramètre par le second caractère.


    .
    ok, je pensais que cette methode ne remplaçais que l'element a l'index.

    merci en tout cas

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par flyman29600 Voir le message
    ok, je pensais que cette methode ne remplaçais que l'element a l'index.
    Ce n'est pas possible : l'utilisation de l'index dans ton code ne se fait pas au même "niveau".
    Quand tu écris ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaineCodee.replace(chaineCodee.charAt(i), ALPHA.charAt(j+DECALAGE));
    Tu exécutes en fait plusieurs statements, sucessivement :
    1. chaineCodee.charAt(i) : premier résultat (un caractère)
    2. j+DECALAGE : deuxième résultat (un int)
    3. ALPHA.charAt( deuxième résultat ) : troisième résultat (un caractère)
    4. chaineCodee.replace(premier résultat, troisème résultat) : résultat final

    donc l'index i utilisé dans la détermination du premier résultat n'est pas possiblement connu par la méthode replace.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Probleme avec REGEX sous IE
    Par Death83 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 18/07/2006, 20h02
  2. [RegEx] Probleme de Regex
    Par keil dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2006, 14h14
  3. probleme de regex! (debutant)
    Par kriskikout dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2006, 23h00
  4. [langage] autre probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2004, 17h01
  5. [langage] probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2004, 15h36

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