Votre question

Comparaison de caractères

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
5 Novembre 2010 02:20:34

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 :

  1. public class Main
  2. {
  3.  
  4. static String chaine1 = "ABCD";
  5. static String chaine2 = "BACD";
  6. static int compteurBienPlaces;
  7. static int compteurMalPlaces;
  8.  
  9. public static void main(String[] args)
  10. {
  11. for (int i = 0; i < chaine1.length(); i++)
  12. {
  13. char[] tableauChaine1 = chaine1.toCharArray();
  14. char[] tableauChaine2 = chaine2.toCharArray();
  15.  
  16. if (tableauChaine1[i] == tableauChaine2[i])
  17. {
  18. System.out.println("Le caractère " + tableauChaine1[i] + " est"
  19. + " bien placé");
  20. compteurBienPlaces++;
  21. }
  22. else if (tableauChaine1[i] != tableauChaine2[i])
  23. {
  24. System.out.println("Le caractère " + tableauChaine1[i] + " est"
  25. + " mal placé");
  26. compteurMalPlaces++;
  27. }
  28. }
  29. System.out.println("Le nombre de caractères bien placés est de "
  30. + compteurBienPlaces + " et " + compteurMalPlaces + " sont mal "
  31. + "placés.");
  32. }
  33. }


Merci d'avance

Autres pages sur : comparaison caracteres

a c 232 L Programmation
5 Novembre 2010 10:17:14

Salut,

Déjà, 1ère remarque c'est que tu réinitialises ton tableauChaine1 et tableauChaine2 à chaque fois que tu boucles. Sors l'initialisation de la boucle for.

Et pour répondre à ton problème, il faut que tu te rajoutes une condition dans ton else if pour vérifier que le tableauChaine1 soit contenu dans le tableauChaine2. Pour ça, tu peux convertir le tableau en une list et utiliser contains:
  1. Arrays.asList(tableauChaine2).contains(tableauChaine1[i])


Là aussi tu peux mettre l'initialisation de la liste en dehors de la boucle for pour éviter de la recréer à chaque fois.
m
0
l
6 Novembre 2010 03:46:25

Bonjour,

J:ai essayé ça:

  1. private static String CombinaisonEntree = "";
  2. private static char[] lettresEntrees = new char[4];
  3. private static String CombinaisonEntree = "";
  4. private static String lettresAleatoiresTest = "";
  5. private static int compteurBienPlaces;
  6. private static int compteurMalPlaces;
  7.  
  8.  
  9. private static void determinerSiExact() throws IOException
  10. {
  11. CombinaisonEntree = CombinaisonEntree.toUpperCase();
  12. lettresEntrees = CombinaisonEntree.toCharArray();
  13. for (int i = 0; i < CombinaisonEntree.length(); i++)
  14. {
  15. char[] tableauChaine1 = CombinaisonEntree.toCharArray();
  16. char[] tableauChaine2 = lettresAleatoiresTest.toCharArray();
  17.  
  18. if (tableauChaine1[i] == tableauChaine2[i])
  19. {
  20. System.out.println("Le caractère " + tableauChaine1[i] + " est"
  21. + " bien placé");
  22. compteurBienPlaces++;
  23. }
  24. }
  25.  
  26. for (int i = 0; i < CombinaisonEntree.length(); i++)
  27. {
  28. char caractere = CombinaisonEntree.charAt(i);
  29.  
  30. for (int a = 0; a < lettresAleatoiresTest.length(); a++)
  31. {
  32. char carac = lettresAleatoiresTest.charAt(a);
  33. if (carac == caractere)
  34. {
  35. if (i != a)
  36. {
  37. System.out.println("La lettre " + caractere + " est dans la combinaison mais pas à cet endroit");
  38. compteurMalPlaces++;
  39. }
  40. }
  41. }
  42. }
  43. System.out.println(compteurBienPlaces + " bien et " + compteurMalPlaces + " mal");
  44. System.out.println("Le nombre de caractères bien placés est de "
  45. + compteurBienPlaces + " et " + compteurMalPlaces + " sont mal "
  46. + "placés.");
  47. compteurBienPlaces = 0;
  48. compteurMalPlaces = 0;
  49. }


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
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS