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 :

Comparaison de caractères


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 44
    Points
    44
    Par défaut Comparaison de caractères
    Bonjour,

    J'ai écrit un petit programme qui permet de comparer les caractères et d'afficher le nombre qui sont bien ou mal placés, mais j'aimerais que si il y a un caractère dans la chaine1 qui n'est pas dans chaine2, il soit ignoré. Par exemple si la chaine1 : ABCD et chaine2 :ANBD, j'aimerais que le programme me dise " 2 bien placés et 1 mal placé ", le N étant ignoré parce qu'il n'est pas dans les deux chaines. Voici ce que j'ai jusqu'à maintenant :

    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
    public class Main
    {
     
        static String chaine1 = "ABCD";
        static String chaine2 = "BACD";
        static int compteurBienPlaces;
        static int compteurMalPlaces;
     
        public static void main(String[] args)
        {
            for (int i = 0; i < chaine1.length(); i++)
            {
                char[] tableauChaine1 = chaine1.toCharArray();
                char[] tableauChaine2 = chaine2.toCharArray();
     
                if (tableauChaine1[i] == tableauChaine2[i])
                {
                    System.out.println("Le caractère " + tableauChaine1[i] + " est"
                            + " bien placé");
                    compteurBienPlaces++;
                }
                else if (tableauChaine1[i] != tableauChaine2[i])
                {
                    System.out.println("Le caractère " + tableauChaine1[i] + " est"
                            + " mal placé");
                    compteurMalPlaces++;
                }
            }
            System.out.println("Le nombre de caractères bien placés est de "
                    + compteurBienPlaces + " et " + compteurMalPlaces + " sont mal "
                    + "placés.");
        }
    }
    Merci d'avance

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Votre programme est tordu...

    A la va vite et en premier lieu :

    je dirais que vous devez parcourir les deux chaînes et trouver les caractères différents. Vous les sauvegardez dans un tableau/liste. Genre je prends le premier caractère de la chaîne 1 et je vérifie qu'il est dans la chaîne 2.

    Ensuite lorsque vous effectuez votre test, si le caractère fait parti du tableau/liste, vous zappez le test.

    Algo :

    list CaractereNonPresentDansLesDeuxListes

    Parcourir caractere de chaine 1
    pour chaque caractere de chaine 2
    si caractere pas present
    ajouter à list CaractereNonPresentDansLesDeuxListes

    faire dans l'autre sens :

    Parcourir caractere de chaine 2
    pour chaque caractere de chaine 1
    si caractere pas present
    ajouter à list CaractereNonPresentDansLesDeuxListes

    Ensuite votre algo, mais vous testez que le caractère n'est pas présent dans
    CaractereNonPresentDansLesDeuxListes.

    PS : je n'ai pas mis cette solution à l'épreuve algorithmique, il y a peut-être des solutions plus performantes.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Merci pour ta solution mais j'ai un peu de difficulté à le transférer en java pour le Parcourir caractere de chaine 1

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Il est vrai que je ne suis pas développeur Java, mais ceci ne permet-il pas de parcourir un caractère dans une chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (tableauChaine1[i] == tableauChaine2[i])
    Par "parcourir caractere de chaine 1" je voulais dire "pour chaque caractere de chaine 1".

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 44
    Points
    44
    Par défaut
    Je suis tout perdu et je n'arrive pas à le faire fonctionner

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    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
    int length = chaine1.length();
    if (length != chaine2.length()) {
    	throw new IllegalArgumentException("'" + chaine1 + "' et '"
    			+ chaine2 + "' ne sont pas de même taille");
    }
     
    char[] tableauChaine1 = chaine1.toCharArray();
    char[] tableauChaine2 = chaine2.toCharArray();
     
    int compteurBienPlaces = 0;
    List<Character> caracteresMalPlaces1 = new ArrayList<Character>(length);
    List<Character> caracteresMalPlaces2 = new ArrayList<Character>(length);
     
    for (int i = 0; i < length; i++) {
    	char c1 = tableauChaine1[i];
    	char c2 = tableauChaine2[i];
     
    	if (c1 == c2) {
    		compteurBienPlaces++;
    	} else {
    		caracteresMalPlaces1.add(c1);
    		caracteresMalPlaces2.add(c2);
    	}
    }
     
    caracteresMalPlaces1.retainAll(caracteresMalPlaces2);
    int compteurMalPlaces = caracteresMalPlaces1.size();
     
    System.out.println("Le nombre de caractères bien placés est de "
    		+ compteurBienPlaces + " et " + compteurMalPlaces
    		+ " sont mal " + "placés.");

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    J'ai essayé ça:

    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
     
        private final static char[] lettresAleatoires =
        {
            'R', 'B', 'O', 'V', 'J', 'F', 'I', 'N'
        };
    private static String CombinaisonEntree = "";
    private static char[] lettresEntrees = new char[4];
    private static String CombinaisonEntree = "";
    private static String lettresAleatoiresTest = "";
        private static int compteurBienPlaces;
        private static int compteurMalPlaces;
    private static void determinerSiExact() throws IOException
        {
            CombinaisonEntree = CombinaisonEntree.toUpperCase();
            lettresEntrees = CombinaisonEntree.toCharArray();
            for (int i = 0; i < CombinaisonEntree.length(); i++)
            {
                char[] tableauChaine1 = CombinaisonEntree.toCharArray();
                char[] tableauChaine2 = lettresAleatoiresTest.toCharArray();
                if (tableauChaine1[i] == tableauChaine2[i])
                {
                    System.out.println("Le caractère " + tableauChaine1[i] + " est"
                            + " bien placé" );
                    compteurBienPlaces++;
                }
            }
            for (int i = 0; i < CombinaisonEntree.length(); i++)
            {
                char caractere = CombinaisonEntree.charAt(i);
                for (int a = 0; a < lettresAleatoiresTest.length(); a++)
                {
                    char carac = lettresAleatoiresTest.charAt(a);
                    if (carac == caractere)
                    {
                        if (i != a)
                        {
                            System.out.println("La lettre " + caractere + " est dans la combinaison mais pas à cet endroit" );
                            compteurMalPlaces++;
                        }
                    }
                }
            }
            System.out.println(compteurBienPlaces + " bien et " + compteurMalPlaces + " mal" );
            System.out.println("Le nombre de caractères bien placés est de "
                    + compteurBienPlaces + " et " + compteurMalPlaces + " sont mal "
                    + "placés." );
            compteurBienPlaces = 0;
            compteurMalPlaces = 0;
        }
    Mais comme je ne connais pas les caractères que l'ordinateur va générer, je dois les mettre dans un tableau et les comparer en excluant les lettres qui ne correspondent pas aux caractères du tableau et aux lettres qu'a entré l'utilisateur. Mais supposons que la chaîne générée soit V B R R et que j'entre V B R E. Le résultat est le suivant:

    Le caractère B est bien placé
    La lettre V est dans la combinaison mais pas à cet endroit
    La lettre R est dans la combinaison mais pas à cet endroit
    1 bien et 2 mal
    Le nombre de caractères bien placés est de 1 et 2 sont mal placés.

    Alors que le V est bien placé. Si j'entre F F F F, il me dit que les 4 sont dans ma chaîne, alors que le F n'a pas été généré par l'ordinateur

    Merci encore

Discussions similaires

  1. Comparaison de caractères
    Par Antoun dans le forum SQL
    Réponses: 7
    Dernier message: 15/01/2008, 15h05
  2. Comparaison de caractères , et autres problèmes
    Par incal dans le forum Débuter
    Réponses: 11
    Dernier message: 18/09/2007, 18h25
  3. Comparaison de caractère
    Par mcdelay dans le forum Langage
    Réponses: 1
    Dernier message: 04/12/2006, 15h43
  4. Réponses: 4
    Dernier message: 05/07/2004, 13h17

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