[Java] Trouver un charactère dans un tableau....[résolu]

Trouver un charactère dans un tableau....[résolu] [Java] - Java - Programmation

Marsh Posté le 02-05-2005 à 11:22:55    

Salut à tous,
j'essai de faire un jeu du pendu. Donc, j'ai ma chaine de caractère correspondant au mot à trouver et j'ai mon charactère que la personne à taper.
 
J'aimerais savoir comment faire pour vérifier que le charactère se trouve (ou pas) dans le tableau.
 
J'ai vu dans la doc java la méthode compareTo(Character anotherCharacter).
 
Est-ce la méthode à utiliser ou y a-t-il mieux ?
 
Merci pour vos conseils à un newbie...


Message édité par frenchlover le 02-05-2005 à 14:37:00

---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 02-05-2005 à 11:22:55   

Reply

Marsh Posté le 02-05-2005 à 11:28:54    

boolean contains(char c, char[] array) {
    for (int i = 0; i < array.length; i++) {
        if (c == array[i]) {
            return true;
        }
    }
    return false;
}
 
ou bien,
 
boolean contains(char c, String s) {
    return (s.indexOf(c) != -1);
}
 
ou encore autre chose.


---------------
Le site de ma maman
Reply

Marsh Posté le 02-05-2005 à 11:35:35    

Merci pour ta réponse, mais pourrais-tu l'expliquer un peu ???
 
Est-il possible de faire :

Code :
  1. while(y<=tableauMot.length()){
  2. if (lettre.compareTo(tableauMot[y])==0){
  3.  System.out.println("Les caracteres sont egaux!" );
  4. }
  5. else{
  6.  System.out.println("Les caracteres sont differentes" );
  7. }
  8. }


Message édité par frenchlover le 02-05-2005 à 11:37:25

---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 02-05-2005 à 11:40:23    

frenchlover a écrit :

Merci pour ta réponse, mais pourrais-tu l'expliquer un peu ???
 
Est-il possible de faire :

Code :
  1. while(y<=tableauMot.length()){
  2. if (lettre.compareTo(tableauMot[y])==0){
  3.  System.out.println("Les caracteres sont egaux!" );
  4. }
  5. else{
  6.  System.out.println("Les caracteres sont differentes" );
  7. }
  8. }



 
 
C'est possible, mais à mon avis tu n'auras pas le résultat escompté : il va imprimer un message pour chaque lettre testée.
 
En plus ce sera toujours la première lettre, et ta boucle est infinie.


Message édité par Elmoricq le 02-05-2005 à 11:41:04
Reply

Marsh Posté le 02-05-2005 à 11:45:27    

Ouais, j'ai vu ça et je viens de corriger :

Code :
  1. public static void main (String[] arg){
  2.  String mot="monsieur";
  3.  char[] tableauMot=mot.toCharArray();
  4.  int x=mot.length();
  5.  char lettre='n';
  6.  int y=0;
  7.  while(y<=x){
  8.   if (lettre.compareTo(tableauMot[y])==0){
  9.    System.out.println("Les caracteres sont egaux!" );
  10.   }
  11.   else{
  12.    System.out.println("Les caracteres sont differentes" );
  13.   }
  14.   y=y+1;
  15.  }
  16. }


 
Le fait qu'il me renvoie un message à chaque fois, c'est pas grave pour l'instant. C'est juste pour tester la méthode compareTo pour voir si ça peut marcher.
 
Seulement, là il me dis à la ligne 16 que je cite "char cannot be deferenced". Qu'est ce que cela veut dire et comment le changer ???


Message édité par frenchlover le 02-05-2005 à 11:50:44

---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 02-05-2005 à 11:56:08    

Tu fais "lettre.[qqchose]" où lettre est de type char, c'est pas possible. Utilise l'une des méthodes qu'on t'a donné plus haut. Si tu tiens vraiment à utiliser compareTo (mais c'est idiot) : Character.toString(lettre).compareTo(tableauMot[y]) [...].

Reply

Marsh Posté le 02-05-2005 à 11:56:28    

Tu ne peux pas utiliser de méthode sur un type primitif.
 
Ton algorithme est trop long par rapport à ton besoin. Je propose :
 

Code :
  1. String mot = "monsieur";
  2. char lettre = 'n';
  3. for (int i = 0; i < mot.length(); i++) {
  4.     if (lettre == mot.charAt(i)) {
  5.         System.out.println("Les caractères sont égaux." );
  6.     } else {
  7.         System.out.println("Les caractères sont différents." );
  8.     }
  9. }


 
Mais est-ce vraiment ce que tu veux, i.e. imprimer le résultat le chaque test.


Message édité par Cherrytree le 02-05-2005 à 11:57:36

---------------
Le site de ma maman
Reply

Marsh Posté le 02-05-2005 à 12:03:49    

Non, le but final sera de comparer le caractère tapé par le joueur avec le tableau de caractère du mot généré par l'ordi afin de voir si le caractère est bon ou pas.
 
Là, c'était juste pour tester la méthode compareTo. Si vous dites que c'est pas une bonne solution, je n'ai aucune objection pour changer.
 
Je veux bien utiliser les méthodes de Cherrytree, mais je comprend pas trop comment elles marchent.
En gros, on teste le caractère 'c' avec le tableau [array] et on regarde si 'c' se trouve dedans et on sort si il si trouve. C'est ça ???
 
boolean contains(char c, char[] array) {  
    for (int i = 0; i < array.length; i++) {  
        if (c == array[i]) {  
            return true;  
        }  
    }  
    return false;  
}  
 
Mais si jamais le caractère y est 2 fois ??? Par exemple "cacao". Le deuxième 'c' ne sera pas identifié, exact ???


---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 02-05-2005 à 12:10:34    

frenchlover a écrit :


Mais si jamais le caractère y est 2 fois ??? Par exemple "cacao". Le deuxième 'c' ne sera pas identifié, exact ???


Tu as tout compris.
 
On peux modifier pour s'adapter à ce nouveau besoin.
 

Code :
  1. public int count(char c, char[] array) {
  2.     int count = 0;
  3.     for (int i = 0; i < array.length; i++) {
  4.         if (c == array[i]) {
  5.             count++;
  6.         }
  7.     }
  8.     return count;
  9. }


 
Celle-ci te retourne le nombre d'occurences de c dans array.


---------------
Le site de ma maman
Reply

Marsh Posté le 02-05-2005 à 12:21:15    

Pourquoi est-ce qu'il me demande un ; à la ligne 5 ???

Code :
  1. class Pendu{
  2. public static void main (String[] arg){
  3.  char c='n';
  4.  char[] array="montagne".toCharArray();
  5.  boolean contains(char c,char[] array){ 
  6.      for (int i = 0; i < array.length; i++) { 
  7.           if (c == array[i]) { 
  8.               return true
  9.           } 
  10.       } 
  11.       return false;
  12.       System.out.println(contains); 
  13.      }
  14. }


 
Tiens, je vais également essayer ta 3ème solution avec le nombre d'occurence.


---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 02-05-2005 à 12:21:15   

Reply

Marsh Posté le 02-05-2005 à 12:30:04    

frenchlover a écrit :

Pourquoi est-ce qu'il me demande un ; à la ligne 5 ???


 
Parce que tu essaies de définir une méthode dans une autre, c'est syntaxiquement incorrect...

Reply

Marsh Posté le 02-05-2005 à 12:36:02    

frenchlover a écrit :

Pourquoi est-ce qu'il me demande un ; à la ligne 5 ???

Code :
  1. class Pendu{
  2. public static void main (String[] arg){
  3.  char c='n';
  4.  char[] array="montagne".toCharArray();
  5.  boolean contains(char c,char[] array){ 
  6.      for (int i = 0; i < array.length; i++) { 
  7.           if (c == array[i]) { 
  8.               return true
  9.           } 
  10.       } 
  11.       return false;
  12.       System.out.println(contains); 
  13.      }
  14. }


 
Tiens, je vais également essayer ta 3ème solution avec le nombre d'occurence.


Ta syntaxe est mauvaise. La déclaration de la méthode contains est mal construite. Je propose :
 

Code :
  1. public class Pendu {
  2.     public static void main(String[] args) {
  3.         char lettre = 'n';
  4.         char mot = "montagne".toCharArray();
  5.         if (contains(lettre, mot)) {
  6.             System.out.println("Lettre trouvée." );
  7.         } else {
  8.             System.out.println("Lettre non trouvée." );
  9.         }
  10.     }
  11.     public static boolean contains(char c, char[] array) {
  12.         for (int i = 0; i < array.length; i++) { 
  13.             if (c == array[i]) { 
  14.                 return true
  15.             } 
  16.         } 
  17.         return false;
  18.     } 
  19. }


 
Il va te falloir creuser plus profondément le langage, car manifestement tu es encore trop léger.


---------------
Le site de ma maman
Reply

Marsh Posté le 02-05-2005 à 12:36:20    

Oui, je viens de m'en rendre compte en testant l'autre méthode. Mille excuses pour mon incapacité... Snif, mais j'essai de m'améliorer...
 
Je pense que cela devrait mieux marcher comme ça :

Code :
  1. class Pendu{
  2. public static boolean contains(char c,char[] array){ 
  3.      for (int i = 0; i < array.length; i++) { 
  4.           if (c == array[i]) { 
  5.               return true
  6.           } 
  7.       } 
  8.       return false;
  9.      }
  10. public static void main (String[] arg){
  11.  char c='n';
  12.  char[] array="montagne".toCharArray();
  13.  contains(c,array);
  14. }


---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 02-05-2005 à 12:37:13    

Ah, ben zut grillé par cherrytree...  :)


---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 02-05-2005 à 12:40:13    

En tout cas, merci beaucoup pour vos précieux conseils.
 
Je me permet humblement de préciser que je ne fais du java que depuis 4 ou 5 tp en classe et que je cherche à allez un peu plus vite que de simple "retourner les nombres pairs dans l'intervalle..."
 
Effectivement, je dois bosser ma syntaxe... Mais, bon la faim m'a déconcentrer  :D  
 
 
Je pense que je devrais pouvoir continuer mon programme maintenant.
 
Encore une fois, merci.


---------------
Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile
Reply

Marsh Posté le 25-04-2014 à 09:39:13    

est-ce que quelqu'un peut m'aider sur mon code java, je veux parcourir un tableau qu'un utilisateur a entré et puis l'interroger après 3 saisie un  
nombre , et le programme indique si ce dernier est inclus dans le tableau,  :??:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed