Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1323 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Comparer 2 tableaux ? [Resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] Comparer 2 tableaux ? [Resolu]

n°1070050
frenchlove​r
Posté le 03-05-2005 à 10:39:09  profilanswer
 

Salut,
je voudrais comparer 2 tableaux pour savoir si ils sont identiques.
exemple : tableau1=[m;o;t;o]
          tableau2=[m;o;t;o]
Je pensais faire un truc du genre :

Code :
  1. while(tableau1 != tableau2){
  2. ...
  3. }


 
mais ça ne fonctionne pas. En fait, si j'affiche les tableaux avec un System.out.println, les valeurs retourné sont différentes.  
 
1) Sauriez vous pourquoi ça ne fonctionne pas ?
2) Comment pourrais faire pour les comparer ?
 
Merci


Message édité par frenchlover le 03-05-2005 à 12:39:19

---------------
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
mood
Publicité
Posté le 03-05-2005 à 10:39:09  profilanswer
 

n°1070063
nraynaud
lol
Posté le 03-05-2005 à 10:47:07  profilanswer
 

tu as une classe java.util.Arrays qui contient une méthode equals qui fait ce que tu veux.
 
en gros, en java, != compare l'identité des tableaux, pas l'agalité. ça veut dire qu'il regarde si c'est le même alors que tou tu veux regader si 2 tableaux différents contiennent les même valeurs.


---------------
trainoo.com, c'est fini
n°1070078
frenchlove​r
Posté le 03-05-2005 à 10:51:30  profilanswer
 

Merci bien, je savais pas que != ne comparé que l'égalité.
 
Je vais allez voir la class concerné.


---------------
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
n°1070088
nraynaud
lol
Posté le 03-05-2005 à 10:52:40  profilanswer
 

IDENTITE !


---------------
trainoo.com, c'est fini
n°1070112
frenchlove​r
Posté le 03-05-2005 à 11:01:25  profilanswer
 

Je comprend pas le dernier post ???
 
Par contre la classe java.util.Arrays  m'oblige à sortir du traitement en cour pour traiter l'égalité et y revenir. N'y a-t-il pas une autre astuce ??
 
Je file une partie du code pour que tu vois. Le problème se situe à la ligne 9.
 

Code :
  1. public static void compare(String motus){
  2.      int coupRestant=10;
  3.      char[] tableauMot=motus.toCharArray();
  4.      int art=tableauMot.length;
  5.      System.out.println(art);
  6.      char[] tableauReponse=new char[art];
  7.      char[] tableauAnswer=new char[art];
  8.      String lettre;
  9.      while(tableauAnswer!=tableauReponse){
  10.       do{
  11.    lettre=lireChaine("Taper une lettre :" );
  12.   }while(lettre==null);
  13.   char[] convLettre=lettre.toCharArray();
  14.   char laLettre=convLettre[0];
  15.       String reponse="";
  16.       for (int i=0; i<art; i++) {
  17.           if (laLettre == tableauMot[i]) {
  18.            reponse=reponse + tableauMot[i];
  19.           }
  20.           else{
  21.            reponse=reponse + "*";
  22.           }
  23.           tableauReponse=reponse.toCharArray();
  24.       }
  25.   for(int x=0; x<art; x++){
  26.    if(tableauReponse[x]=='*'){
  27.    }
  28.    else{
  29.     tableauAnswer[x]=tableauReponse[x];
  30.    }
  31.    System.out.println("Valeur de la case "+x+" = "+tableauAnswer[x]);
  32.   }
  33.   coupRestant=coupRestant-1;
  34.   System.out.println("Il vous reste "+coupRestant+" tentatives" );
  35.      }
  36.     }


---------------
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
n°1070120
nraynaud
lol
Posté le 03-05-2005 à 11:03:56  profilanswer
 

heu c'est quoi les règles de ce jeu déjà ?
je me souviens plus.


---------------
trainoo.com, c'est fini
n°1070136
frenchlove​r
Posté le 03-05-2005 à 11:09:50  profilanswer
 

Bah, c'est censé être un bête jeu du pendu, mais c'est moi qui vais finir par me pendre...  :D  
 
Une personne rentre un mot qui est converti en tableau (tableauMot). Puis ensuite, le joueur cherche à le trouver en tapant des lettres. Si la lettre est dans tableauMot, ça retourne un tableau avec les emplacements de la lettre, sinon, ça retourne une étoile.
ex: mot=management,  
tour 1 :lettre=m,  
ça retourne un tableau (tableauReponse[m;*;*;*;*;*;m;*;*;*].
 
tour 2 :lettre=a,
ça retourne un tableau (tableauReponse[m;a;*;a;*;*;m;*;*;*].
 
Je voudrais comparer ce tableau là à tableauMot. Tant qu'ils sont différents, on continue à demander les lettres, si ils sont identiques, on arrête et on affiche un message de victoire.


Message édité par frenchlover le 03-05-2005 à 11:11:05

---------------
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
n°1070146
Cherrytree
cn=?
Posté le 03-05-2005 à 11:17:17  profilanswer
 

frenchlover a écrit :

Merci bien, je savais pas que != ne comparé que l'égalité.
 
Je vais allez voir la class concerné.


 


 

frenchlover a écrit :

Je comprend pas le dernier post ???


nraynaud t'informe juste que != ne compare que l'identité.


---------------
Le site de ma maman
n°1070157
nraynaud
lol
Posté le 03-05-2005 à 11:22:30  profilanswer
 

ok, j'avais pas compris.
Normalement, on doit pas donner les réponses, mais j'ai pas trop envie de faire un long discours.
 

Code :
  1. while(! java.util.Arrays.equals(tableauAnswer,tableauReponse)){
  2. ...


---------------
trainoo.com, c'est fini
n°1070168
frenchlove​r
Posté le 03-05-2005 à 11:27:24  profilanswer
 

Ben, c'est gentil, mais là, il ne rentre plus dans la boucle  :(  
 


---------------
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
mood
Publicité
Posté le 03-05-2005 à 11:27:24  profilanswer
 

n°1070173
nraynaud
lol
Posté le 03-05-2005 à 11:32:06  profilanswer
 

tu n'as pas oublié le point d'exclamation ?


---------------
trainoo.com, c'est fini
n°1070174
benou
Posté le 03-05-2005 à 11:32:30  profilanswer
 

frenchlover a écrit :

Ben, c'est gentil, mais là, il ne rentre plus dans la boucle  :(


tu t'es posé la question du pourquoi ??
tu as fait des tests unitaires avec la méthode qui t'as été indiquée ?


---------------
ma vie, mon oeuvre - HomePlayer
n°1070176
nraynaud
lol
Posté le 03-05-2005 à 11:33:20  profilanswer
 

bon et ton algo il est un peu compliqué en fait ...


---------------
trainoo.com, c'est fini
n°1070180
frenchlove​r
Posté le 03-05-2005 à 11:35:59  profilanswer
 

Non, non, j'ai bien mis le point d'exclamation. Ce qui est bizarre, c'est que syntaxiquement, ça a l'air bon. Je comprend pas pourquoi ça ne rentre pas dans la boucle.
 
Le programme fonctionne bien jusqu'à cette ligne. Après, ben il rentre pas dans la boucle.
 
Faut-il importer la classe java.util.Arrays (ce que j'ai fait) ou est ce que "! java.util.Arrays" permet d'importer la classe ?


---------------
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
n°1070184
nraynaud
lol
Posté le 03-05-2005 à 11:37:15  profilanswer
 

ça compilerait pas sinon.


---------------
trainoo.com, c'est fini
n°1070188
the real m​oins moins
Posté le 03-05-2005 à 11:39:28  profilanswer
 

frenchlover a écrit :

Non, non, j'ai bien mis le point d'exclamation. Ce qui est bizarre, c'est que syntaxiquement, ça a l'air bon. Je comprend pas pourquoi ça ne rentre pas dans la boucle.
 
Le programme fonctionne bien jusqu'à cette ligne. Après, ben il rentre pas dans la boucle.


Pöusse un peu, rentre le ventre, et si ça passe toujours pas, descend d'un cran [:moule_bite]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1070193
frenchlove​r
Posté le 03-05-2005 à 11:40:40  profilanswer
 

while(! java.util.Arrays.equals(tableauAnswer,tableauReponse)){
 
Ca signifie bien que tant que tableauAnswer et tableauReponse sont pas identique alors on continue la boucle. Sinon on arrête.
 
C'est bien ça ?
 
Ne doit-on pas à un moment introduire un boolean ?


---------------
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
n°1070205
frenchlove​r
Posté le 03-05-2005 à 11:52:00  profilanswer
 

Je pense avoir trouvé d'où vient l'erreur.
Je défini char[] tableauReponse=new char[art] et char[] tableauAnswer=new char[art] juste au-dessus. Du coup, maintenant, pour lui, les 2 tableaux sont identiques, car ils sont vide et ne rentre pas dans la boucle.
 
 
Mais comment initialiser les 2 tableaux à la même taille sans qu'ils soient identiques ???
 
Hum, hum... Je crois que je vais me pendre moi  :D


Message édité par frenchlover le 03-05-2005 à 12:02:32

---------------
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
n°1070237
belgique
Posté le 03-05-2005 à 12:07:03  profilanswer
 

Peut être en ne testant pas la condition lors de la première rentrée dans la boucle.

n°1070246
frenchlove​r
Posté le 03-05-2005 à 12:10:37  profilanswer
 

Dans la catégorie gros boulet, je demande.... moi.
 
Arg, je ne testais pas les bons tableau. Fallait tester tableauAnswer et tableauMot (et non pas tableauReponse).
 
En tout cas merci à nraynaud pour son aide très précieuse. Au passage, si jamais il repasse par ce topic, je sais pas si il va se souvenir de moi, mais on c'est connu à RadioU à Brest.
 
Salutation


---------------
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
n°1071452
nraynaud
lol
Posté le 04-05-2005 à 11:08:02  profilanswer
 

frenchlover a écrit :

Au passage, si jamais il repasse par ce topic, je sais pas si il va se souvenir de moi, mais on c'est connu à RadioU à Brest.
 
Salutation


iiiirk je suis là incognito ! qui es-tu illustre inconnu ? si c'est ton pseudo, je me souviens pas.
 
(t'as vu que j'essaye d'aller à la télé amateur maintenant ?)
 
sinon, pour pas tester la première fois, ben tu fais un :

Code :
  1. do {
  2. ...
  3. } while(pouet);


---------------
trainoo.com, c'est fini
n°1071532
the real m​oins moins
Posté le 04-05-2005 à 11:59:53  profilanswer
 

do/while is teh evil§§


Message édité par the real moins moins le 04-05-2005 à 11:59:58

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1071547
frenchlove​r
Posté le 04-05-2005 à 12:11:44  profilanswer
 

Ben, c'était pas mon surnom à la radio.
 
On a présenté la spécial téléton ensemble, et sinon, je présenter "chapitre 101.1" le vendredi soir. Mais ça remonte à au moins 2 ans. Un mec brun avec des lunettes. Je t'ai reconnu par ton site. Un mec avec des lunettes comme ça, ça ne s'oublie pas  :D .
 
En tout cas merci pour le coup de main. Mon programme fonctionne maintenant. Reste plus qu'à comprendre comment marche la classe graphics, et je pourrais également retourner le mec qui se fait pendre  :lol: .


Message édité par frenchlover le 04-05-2005 à 12:12:42

---------------
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
n°1071641
nraynaud
lol
Posté le 04-05-2005 à 13:19:15  profilanswer
 

frenchlover a écrit :

Ben, c'était pas mon surnom à la radio.
 
On a présenté la spécial téléton ensemble, et sinon, je présenter "chapitre 101.1" le vendredi soir. Mais ça remonte à au moins 2 ans. Un mec brun avec des lunettes. Je t'ai reconnu par ton site. Un mec avec des lunettes comme ça, ça ne s'oublie pas  :D .


t'as fait les 30h aussi ? je me souviens qu'on était 2 mais je me souviens plus qui c'était l'autre, désolé :/
 
trop d'alcool depuis.
 
oui, effectivement, il m'est arrivé de porter ces lunettes dans la cité U ....


Message édité par nraynaud le 04-05-2005 à 13:20:03

---------------
trainoo.com, c'est fini
n°1071675
Profil sup​primé
Posté le 04-05-2005 à 13:47:55  answer
 

frenchlover, plutôt que de tester si les deux tableaux contiennent les mêmes éléments. Initialise un compteur que tu incrémentes à chaque fois qu'une ou plusieurs lettres sont trouvées et quand ce compteur arrive à la longueur du mot, c'est que ce mot a été trouvé. Y'aurait pas mal d'autres remarque à faire sur ton programme, mais il faut aussi que tu te mettes un reflechir un peu. :D

n°1071690
nraynaud
lol
Posté le 04-05-2005 à 13:58:44  profilanswer
 

alerim > j'ai hésité à lui dire, je me suis dit que c'était un peu décourageant comme truc :p


---------------
trainoo.com, c'est fini
n°1071799
frenchlove​r
Posté le 04-05-2005 à 14:54:21  profilanswer
 

Pour les 30h, c'était Felteux. Moi, je suis arrivé le matin avec les croissants. Bah, tant d'alcool depuis... Je sais ce que c'est. Sans la photo sur ton site, j'aurais pas fais le rapprochement.
 
Pour ce qui du compteur, pourquoi pas. C'est sur que mon prog dois avoir plein de truc bancal. Il fonctionne, mais surement pas de façon optimal. Toutes les remarques sont les bienvenu. Je ne demande qu'à m'améliorer.
 
Et dans ce but, merci d'essayer de pas perdre de vue que je débute le JAVA, et donc de ne pas être trop "technique" ou plutôt de ne pas utiliser trop d'abréviation. :D  
 
Donc là, pour le coup du compteur, en fait on garde la partie qui compare la lettre tapé au mot du départ, mais toutes la partie qui place cette lettre dans un nouveau tableau qu'on teste avec le tableau du mot, on la dégage et on remplace par un compteur. C'est ça ?


---------------
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
n°1071985
nraynaud
lol
Posté le 04-05-2005 à 15:52:09  profilanswer
 

en fait c'est nul le compteur, dans un pendu, on peut trouver les lettres dans le désordre, donc c'est soit à peu près bon ce que tu as fait.


---------------
trainoo.com, c'est fini
n°1071999
Profil sup​primé
Posté le 04-05-2005 à 15:58:31  answer
 

Commence par penser l'algorithme indépendamment du code :
 
Tu dois avoir une boucle principale qui s'arrête quand le mot est trouvé ou quand le joueur est pendu. :D
 
Ensuite dans ta boucle tu lis une proposition du joueur. Tu as trois cas à distinguer : le joueur a entré une lettre, une proposition de mot ou une entrée incorrecte (tu vas pas te compliquer la vie, ici une entrée incorrecte c'est une chaîne dont la longueur n'est ni 1 ni la longueur du mot à trouver). Pour chaque cas tu fais le traitement approprié : si c'est un mot, c'est simple : tu les compares avec proposition.equals(mot_a_trouver) (ou tu crées une méthode "comparer" qui compare deux tableaux si tu choisis d'utiliser des tableaux de caractères). Si c'est une lettre, tu récupères le premier caractère de ta chaîne (proposition.charAt(0) ou proposition[0] si tu stockes la proposition dans un tableau) et tu le compares avec chaque caractère du mot à trouver. Dès que tu trouves une occurrences de la lettre, tu incrémentes le compteur correspondant au nombre de lettres trouvées et tu mets cette lettre dans un tableau annexe qui représente l'évolution du jeu (les lettres trouvées quoi).
 
Voilà c'est vraiment pas plus compliqué que ça et à part la méthode pour lire une chaîne au clavier, c'est vraiment très simple. Tu peux pratiquement traduire littéralement l'algorithme en Java.


Message édité par Profil supprimé le 04-05-2005 à 16:01:59
n°1072001
Profil sup​primé
Posté le 04-05-2005 à 16:00:01  answer
 

nraynaud a écrit :

en fait c'est nul le compteur, dans un pendu, on peut trouver les lettres dans le désordre, donc c'est soit à peu près bon ce que tu as fait.


 
Hein ? Moi je parlais de compter le nombre de lettres trouvées. Ton compteur est incrémenté quand le test "lettre proposée == une lettre du mot" est vérifié.


Message édité par Profil supprimé le 04-05-2005 à 16:00:29
n°1073836
frenchlove​r
Posté le 06-05-2005 à 13:19:15  profilanswer
 

Eh bien, c'est à peu près ce que j'ai fait. Lorsque la personne tape un mot ou caractère, je regarde si c'est valide (dans la fonction lireChaine).
 
Ensuite, je différencie le cas ou c'est un mot ou une lettre. Si c'est le bon mot, alors il fini en congratulant.
Si c'est une lettre, il regarde si elle est dans le mot. Si c'est le cas, il la met dans un nouveau tableau à tous les éventuelles emplacements, sinon, il remplit par une étoile.
Ensuite, il retourne le tableau pour que la personne voit si elle a bon ou pas.
 
Le truc, c'est que la j'utilise des tableaux. Est-ce que ça ne serait pas possible de faire la même chose directement avec les String ??? Ca ferait des ressources mémoires en moins.
 
PS : Voici le code actuel qui a pas mal changé.
 

Code :
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.io.*;
  4. import java.awt.event.*;
  5. import javax.swing.JOptionPane;
  6. import javax.swing.JDialog;
  7. import java.util.Arrays;
  8. import java.awt.Window;
  9. public class Pendu extends JFrame {
  10. JButton btnOk=null;
  11. JButton btnNon=null;
  12. Container conteneur=null;
  13. JLabel lblSaisie = new JLabel();
  14. public Pendu(String mot) {
  15.  final String motus=mot;
  16.  int tailleMot=mot.length();
  17.  lblSaisie.setText("Le mot à trouver fait "+tailleMot+" lettres et vous avez 10 tentatives." );
  18.  lblSaisie.setBounds(new Rectangle(50, 20, 400, 21));
  19.  this.setTitle("Bonjour !!!" );
  20.  this.setSize(new Dimension(420,150));
  21.  this.setLocationRelativeTo(this.getParent());
  22.  WindowAdapter win=new WindowAdapter(){
  23.   public void windowClosing(WindowEvent e){System.exit(0);}
  24.  };
  25.  this.addWindowListener(win);
  26.  conteneur=this.getContentPane();
  27.  conteneur.setLayout(null);
  28.  btnOk=new JButton();
  29.  btnOk.setText("Jouer" );
  30.  btnOk.setBounds(110,60,80,20);
  31.  btnOk.addActionListener(new ActionListener()
  32.   {
  33.    public void actionPerformed(ActionEvent evt){
  34.     btnOk_clic(evt, motus);
  35.    }
  36.   }
  37.  );
  38.  btnNon=new JButton();
  39.  btnNon.setText("Arreter" );
  40.  btnNon.setBounds(240,60,80,20);
  41.  btnNon.addActionListener(new ActionListener()
  42.   {
  43.    public void actionPerformed(ActionEvent evt){
  44.     btnNon_clic(evt);
  45.    }
  46.   }
  47.  );
  48.  conteneur.add(btnOk);
  49.  conteneur.add(lblSaisie, null);
  50.  conteneur.add(btnNon);
  51. }
  52. public void btnOk_clic(ActionEvent evt,String motus){
  53.  this.setVisible(false);
  54.  compare(motus);
  55.  System.exit(0);
  56. }
  57. public void btnNon_clic(ActionEvent evt){
  58.  System.exit(0);
  59. }
  60. public static String lireChaine(String message){
  61.  String valeurMot=null;
  62.  boolean ok=true;
  63.  while(ok==true){
  64.   String saisieMot=JOptionPane.showInputDialog(message);
  65.   if (saisieMot==null)System.exit(0);
  66.   try{
  67.    valeurMot=saisieMot;
  68.    ok=false;
  69.   }
  70.   catch(Exception exc){JOptionPane.showMessageDialog(null,"Veuillez saisir un mot" );
  71.   }
  72.  }
  73.  return valeurMot;
  74. }
  75. public static String penduMot(){
  76.  String mot=null;
  77.  do{
  78.   mot=lireChaine("Taper le mot à chercher :" );
  79.  }while(mot==null);
  80.  new Pendu(mot).setVisible(true);
  81.  return mot;
  82. }
  83. public static void compare(String motus){
  84.      int coupRestant=10;
  85.      char[] tableauMot=motus.toCharArray();
  86.      int art=tableauMot.length;
  87.      char[] tableauReponse=new char[art];
  88.      char[] tableauAnswer=new char[art];
  89.      String lettre;
  90.       while(! java.util.Arrays.equals(tableauAnswer,tableauMot) && coupRestant>=0){ 
  91.        do{
  92.     lettre=lireChaine("Taper une lettre :" );
  93.    }while(lettre==null);
  94.    if(lettre.equals(motus)){
  95.     tableauAnswer=lettre.toCharArray();
  96.     coupRestant=coupRestant-1;
  97.    }
  98.    else{
  99.     char[] convLettre=lettre.toCharArray();
  100.     char laLettre=convLettre[0];
  101.         String reponse="";
  102.         for (int i=0; i<art; i++) {
  103.             if (laLettre == tableauMot[i]) {
  104.              reponse=reponse + tableauMot[i];
  105.             }
  106.             else{
  107.              reponse=reponse + "*";
  108.             }
  109.             tableauReponse=reponse.toCharArray();
  110.         }
  111.     for(int x=0; x<art; x++){
  112.      if(tableauReponse[x]=='*'){
  113.       if(coupRestant==10){
  114.        tableauAnswer[x]=tableauReponse[x];
  115.       }
  116.      }
  117.      else{
  118.       tableauAnswer[x]=tableauReponse[x];
  119.      }
  120.      System.out.print(tableauAnswer[x]);
  121.     }
  122.     coupRestant=coupRestant-1;
  123.     System.out.println("    -> Il vous reste "+coupRestant+" tentatives" );
  124.     System.out.println();
  125.     System.out.println();
  126.        }
  127.      }
  128.       if(! java.util.Arrays.equals(tableauAnswer,tableauMot)){
  129.        showMessageDialogL(coupRestant, motus);
  130.       }
  131.       else{
  132.        showMessageDialogW(coupRestant, motus);
  133.       }
  134.    
  135.     }
  136. public static void showMessageDialogW(int coupRestant, String motus){
  137.  int nombreCoup=10-coupRestant;
  138.  JOptionPane.showMessageDialog(null,"Felicitation, vous avez trouve le mot en "+nombreCoup+" tentatives.\n"
  139.  +"La solution était : "+motus);
  140. }
  141. public static void showMessageDialogL(int coupRestant, String motus){
  142.  JOptionPane.showMessageDialog(null,"Desole, ca sera pour une autre fois.\n"+"La solution était : "+motus);
  143. }
  144. public static void main(String[] args) {
  145.  penduMot();
  146. }
  147. }


---------------
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
n°1073898
Profil sup​primé
Posté le 06-05-2005 à 14:17:22  answer
 

frenchlover a écrit :

Eh bien, c'est à peu près ce que j'ai fait.


 
Très "à peu près" alors, pour ne pas dire pas du tout ce que je t'ai proposé de faire. :)
 
Il faut spécialiser tes méthodes au maximum pour rendre le code plus clair et plus modulaire. Tu peux pas faire une méthode ("compare" ) qui lit une entrée, la compare au mot à trouver, qui affiche le résultat qui compte le nombre de coups. Tu fais une ou deux méthode comparer qui se contentent de faire ce que leur nom indique : comparer. :D
 
Par exemple :
 


private String mot; // mot à trouver.
private char[] avancement; // tableau qui contient l'avancement du jeu.
private nbTrouvees = 0; // nombre de lettres trouvées;
 
[...]
 
public boolean comparer(String proposition) {
    return mot.equals(proposition);
}
 
public boolean comparer(char lettre) {
    for (int i = 0; i < longueur; i++) {
        if (lettre == mot.charAt(i)) {
            avancement[i] = lettre;
            nbTrouvees++;
        }
    }
    return nbTrouvees == longueur;
}


 
Et on pourrait imaginer une boucle principale :
 


public void jeu() {
    String proposition;
    boolean gagne = false;
    boolean fini = false;
    int essais = 0;
 
    while (!gagne && essais < essaisMax) {
        // Afficher l'avancement du jeu (lettres trouvées, dessin du pendu etc).
 
        System.out.print("Proposition : " );
        proposition = lireChaine();
        if (proposition.length() == longueur) {
            gagne = comparer(proposition);
        } else if (proposition.length() == 1) {
            gagne = comparer(proposition[0]);
        } else {
            System.out.println("/!\ Veuillez entrer une lettre ou un mot de la bonne taille." );
            continue;
        }
         
        essais++;
    }
     
    System.out.println("Vous avez " + gagne ? "gagné." : "perdu." );
}


 
Bon c'est totalement improvisé, je ne te garantis pas que c'est la meilleure façon de faire, mais ça a le mérite d'être clair (j'ai volontairement omis les commentaires :D) et assez modulaire. :)


Message édité par Profil supprimé le 06-05-2005 à 14:20:47
n°1074699
frenchlove​r
Posté le 07-05-2005 à 13:53:33  profilanswer
 

En effet, faut que j'essai de plus modulariser.  
 
Par contre, je ne veux pas retourner le nombre de lettre trouvé, mais afficher les lettres trouvées, donc le premier module que tu proposes ne me paraît pas très utile, cependant, il permet de bien voir la modularité et il est faicle à modifier pour obtenir ce que je veux.
 
Je vais regarder ça avec attention.


---------------
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
n°1074862
Profil sup​primé
Posté le 07-05-2005 à 17:11:18  answer
 

frenchlover a écrit :


Par contre, je ne veux pas retourner le nombre de lettre trouvé, mais afficher les lettres trouvées, donc le premier module que tu proposes ne me paraît pas très utile, cependant, il permet de bien voir la modularité et il est faicle à modifier pour obtenir ce que je veux.


 
Je ne vois pas où est le problème (et où est-ce que je fais quelque chose d'inutile). Où est-ce que je renvoie le nombre de lettres trouvées ? Mes deux méthodes "comparer" renvoient true si toutes les lettres ont été trouvées, false sinon. Pour ce qui est d'afficher les lettres trouvées, tu le fais à l'endroit où j'ai mis le commentaire "afficher l'avancement du jeu" et qui se fait simplement avec "System.out.println(avancement);". :)
 
Enfin fais le comme tu le sens et poste ton code. :)


Message édité par Profil supprimé le 07-05-2005 à 17:12:43
n°1075594
frenchlove​r
Posté le 08-05-2005 à 17:25:49  profilanswer
 

Ah, pardon, j'avais pas compris ta fonction comme ça. Je pensais que tu voulais comparer le nombre de lettre. Si le mot fais 7 lettres et que le joueur a trouvé 7 lettres, alors, on affiche le message de victoire.
 
Désolé  :jap:  
 
Je vais avoir un peu moins le temps de m'occuper de ça maintenant, vu que je reprends les cours pour 3 semaines.  :cry:  
 
En fait, j'aime bien être en stage, j'ai plus le temps  :D  
 
Je vais essayer de moduler un peu le code et je le posterais. En plus, je vais essayer d'ajouter un personnage qui est pendu au fur et à mesure. Je pense qu'il faut utiliser la classe graphics ???
 
J'aimerais bien y ajouter 3 niveau de difficultés. Mais ça, je pense que ça devrais pas être trop dur. Suffit de changer le nombre de tentative et aussi la longueur du mot.
 
Est-ce que java a une sorte de dictionnaire ??? Je sais qu'il y a la fonction random qui permet d'avoir un nombre aléatoire. Je pense qu'il doit également y avoir une fonction qui doit permettre d'avoir un mot aléatoire... Parce que y a bien randomWord, mais faut définir une liste de mot. Alors, à moins de faire une liste avec tous les mots du dico, c'est chaud.


Message édité par frenchlover le 08-05-2005 à 19:18:46

---------------
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
n°1075662
Profil sup​primé
Posté le 08-05-2005 à 19:29:38  answer
 

frenchlover a écrit :

Ah, pardon, j'avais pas compris ta fonction comme ça. Je pensais que tu voulais comparer le nombre de lettre. Si le mot fais 7 lettres et que le joueur a trouvé 7 lettres, alors, on affiche le message de victoire.


 
Ben si le mot fait 7 lettres et que le joueur a trouvé les 7 lettres il a gagné, hein. :heink:  
 
Ca n'empêche pas d'afficher l'avancement du jeu.
 

Citation :

Je vais essayer de moduler un peu le code et je le posterais. En plus, je vais essayer d'ajouter un personnage qui est pendu au fur et à mesure. Je pense qu'il faut utiliser la classe graphics ???


 
Mouais, faut utiliser Swing quoi.
 

Citation :


Est-ce que java a une sorte de dictionnaire ??? Je sais qu'il y a la fonction random qui permet d'avoir un nombre aléatoire. Je pense qu'il doit également y avoir une fonction qui doit permettre d'avoir un mot aléatoire... Parce que y a bien randomWord, mais faut définir une liste de mot. Alors, à moins de faire une liste avec tous les mots du dico, c'est chaud.


 
Ca m'étonnerait que l'API Java contienne tous les mots du dictionnaire. :D

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] Comparer 2 tableaux ? [Resolu]

 

Sujets relatifs
[WebService] Serveur nuSoap / Client Java[javascript et PHP]Pb avec saut de ligne[résolu]
[JAVA] Insertion/Suppresion d'une ligne dans une Jtableincorporer chat java dans du php
[resolu]textarea[JAVA] remplacer * par % dans un String?
[Java] Trouver un charactère dans un tableau....[résolu]Synchronisation de tableaux dynamiques en C++
Configurer PHP pour phpMySQL [Résolu] 
Plus de sujets relatifs à : [Java] Comparer 2 tableaux ? [Resolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR