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 :

Crypto A devient B et B devient C


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut Crypto A devient B et B devient C
    bonjour
    mon prg consiste à faire:
    A devient B et B devient C etc,
    si l’utilisateur entre une phrase et le prg change tous les A en B et tous les B en C etc...
    quand j'écris mon prg je suis arrêté dans cette ligne:
    if(let<'a' & let > 'z')
    et prg me dit que :
    the operator < is undefined for the argument StringBuilder, char
    quel est la solution pour remédier ce problème et continuer mon prg

    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
     
    import java.util.Scanner;
    public class Divers4 
    {	
     public static void main(String[] args) 
     {
    	String bla, cod,alpha;
    	int i, pos;
    	System.out.println("Entrez la phrase à coder:");
    	Scanner sc=new Scanner(System.in);
    	bla=sc.nextLine();
    	alpha="abcdefghijklmnopqrstuvwxyz";
    	cod="";
    	for(i=1;i<bla.length();i++)
    	{
    		StringBuilder let=(new StringBuilder(bla).replace(1,i, bla));
    		if(let<'a' & let > 'z')
    	}
     }
    }
    merci d'avance

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il n'y a pas de solution directe pour que cette expression fonctionne : let est un StringBuilder et 'a' un char, donc il est impossible de les comparer.

    De tout manière, c'est l'algorithme qui est n'importe quoi, même si ce n'est que le début.

    1. Déjà, StringBuilder let=(new StringBuilder(bla).replace(1,i, bla)); n'a aucun intérêt.
      ça remplace les caractères entre 1 et i (exclu) par la chaine elle-même.
      Donc
      1. [1,1[ par bla (ça insert bla entre 1, et 2)
      2. [1,2[ par bla
      3. [1,3[ par bla
      4. ...


      Essaye déjà d'exécuter ce programme :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      public class Test {
      	public static void main(String[] args) {
      		String bla = "abcd";
      		for (int i = 1; i < bla.length(); i++) {
      			StringBuilder let = (new StringBuilder(bla).replace(1, i, bla));
      			System.out.println(let);
      		}
      	}
      }
      Ça donne ça :
      aabcdbcd
      aabcdcd
      aabcdd
      Quel rapport avec ce que tu cherches à faire ?
    2. Ensuite, au sujet de let<'a' & let > 'z'
      • & n'est pas l'opérateur logique booléen AND, mais l'opérateur bit à bit AND (ça ne change pas le résultat dans ton cas, mais ça une importance (avec le && la seconde expression n'est pas évaluée si la première est false)
        Essaye d'exécuter ça :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        public class Test {
        	public static void main(String[] args) {
        		String s1="abc";
        		String s2=null;
        		System.out.println( s2!=null && s2.equals(s1));
        		System.out.println( s2!=null & s2.equals(s1));
        	}
        }
      • ensuite, même si let était un caractère, cette expression serait toujours false : en effet, il n'existe aucun caractère qui peut être à la fois inférieur à a, et supérieur à z (qui est supérieur à a).


    Pour faire ton programme, il suffit de parcourir tous les caractères de la chaine (y compris le premier, donc faire partir i de 0 !), puis pour chaque caractère c, s'il est compris entre a inclus et z exclus ([c]c>='a' && c<'z'[c]) le remplacer par (char)(c+1), et si il est égal à z, le remplacer par a (Attention à la problématique de la casse : je te laisse transposer)
    Par contre, cet algorithme n'est pas généralisable (faire un décalage de n au lieu de 1). Pour ça, il est plus interessant de calculer tout d'abord la table de conversion, en partant de la liste de tous les caractères, de les décaler dans un tableau par exemple, puis d'utiliser le tableau comme table de conversion. Je te laisse y réflechir (pense juste que l'index du caractère c dans le tableau c'est c-'a')...
    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
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    j'ai écrit ainsi mais:
    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
     
    import java.util.Scanner;
    public class Divers5 
    {
    	public static void main(String args[])
    	{
            char first[]={'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 second[]={'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'};
     
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter the name: ");
            String n;
            n=sc.nextLine();
            int len=n.length();
            for(int i=0;i<len;i++)
            {
             char c=n.charAt(i);
             for(int j=0;j<26;j++)
             {
              if(c==first[j])
              {
               int pos1=j;
               System.out.print(second[pos1]);
              }    
             }
            }
           }
    	}
    le pg marche mais ces deux lignes un peu longue vous croyiez pas?,est ce qu'il y a moyen le reduire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char first[]={'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 second[]={'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'};

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    en plus mon code ne prend pas en compte le caractère espace

  5. #5
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par domxaline Voir le message
    en plus mon code ne prend pas en compte le caractère espace
    Ni les caractères qui ne sont pas des lettres entre a z : ni les chiffres, ni les caractères accentués et, surtout, ni les majuscules !

    Citation Envoyé par domxaline Voir le message
    j'ai écrit ainsi mais:
    le pg marche mais ces deux lignes un peu longue vous croyiez pas?,est ce qu'il y a moyen le reduire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char first[]={'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 second[]={'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'};
    Si, je crois. Déjà, on a pas besoin de 2 tableaux. Ensuite, on peut générer le second tableau automatiquement.

    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 static void main(String[] args) {
     
    		System.out.println(Arrays.toString(createTableCodage(1)));
    		System.out.println(Arrays.toString(createTableCodage(2)));
    		System.out.println(Arrays.toString(createTableCodage(-1)));
    		System.out.println(Arrays.toString(createTableCodage(0)));
    		System.out.println(Arrays.toString(createTableCodage(28)));
    		System.out.println(Arrays.toString(createTableCodage(-28)));
     
    	}
     
    	public static char[] createTableCodage(int decalage) {
     
    		final int nb = 'z'-'a'+1;
     
    		if ( decalage<0 ) {
    			decalage = -((-decalage)%nb); // on pourrait interdire des décalages superieur au max
    		}
    		else if ( decalage>nb ) {
    			decalage = decalage%nb; // on pourrait interdire des décalages superieur au max
    		}
     
    		char[] table = new char[nb];
     
    		for(char c='a'; c<='z'; c++) {
     
    			int nc = c + decalage; 
     
    			if ( decalage<0 ) {
    				if ( nc<'a' ) {
    					nc = 'z' + (nc - 'a' + 1);
    				}
    			} else if ( decalage>0 ) {
    				if ( nc>'z' ) {
    					nc = 'a' + (nc - 'z' - 1);
    				}
    			}
     
    			table[c-'a']=(char)nc;
     
    		}
     
    		return table;
     
    	}
    Et pour l'utiliser :

    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
    public static void main(String args[]) {
    		char table[] = createTableCodage(1);
     
    		Scanner sc = new Scanner(System.in);
    		System.out.println("Enter the name: ");
    		String n;
    		n = sc.nextLine();
    		int len = n.length();
    		for (int i = 0; i < len; i++) {
    			char c = n.charAt(i);
    			int pos = c-'a';
    			if ( pos>=0 && pos<table.length ) {
    				System.out.print(table[pos]);
    			}
    			else {
    				System.out.print(" "); // non codable
    			}
    		}
    	}
    Pour traiter les majuscules, on sait qu'on peut utiliser la même table, mais juste faire un décalage et repasser en majuscule.

    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
    	public static void main(String args[]) {
    		char table[] = createTableCodage(1);
     
    		Scanner sc = new Scanner(System.in);
    		System.out.println("Enter the name: ");
    		String n;
    		n = sc.nextLine();
    		int len = n.length();
    		for (int i = 0; i < len; i++) {
    			char c = n.charAt(i);
    			boolean maj = Character.isUpperCase(c);
    			if (maj) {
    				c=Character.toLowerCase(c);
    			}
    			int pos = c-'a';
    			if ( pos>=0 && pos<table.length ) {
    				if ( maj ) {
    					System.out.print(Character.toUpperCase(table[pos]));
    				}
    				else {
    					System.out.print(table[pos]);
    				}
    			}
    			else {
    				System.out.print(" "); // non codable
    			}
    		}
    	}
    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.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    merci pour votre aide
    en compilant votre prg j'ai le message suivant; ile veut la méthode "createTableCodage"
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method createTableCodage(int) is undefined for the type Testing7

    at Testing7.main(Testing7.java:6)
    pourtant on a cette méthode, bizarre!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sprintf : le point devient virgule ?!
    Par jula dans le forum C++
    Réponses: 4
    Dernier message: 17/09/2004, 12h50
  2. [Tomcat 5.0][Log4j] Il devient fou !!!
    Par yolepro dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 24/04/2004, 21h08
  3. Un warning devient fatal
    Par tomnie dans le forum Linux
    Réponses: 3
    Dernier message: 01/04/2004, 13h48
  4. varchar devient char
    Par airwolf dans le forum Outils
    Réponses: 2
    Dernier message: 08/02/2004, 01h35
  5. "é" devient "é" !
    Par mathieu dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 29/10/2003, 17h18

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