Fonction equals

Jynjyt Messages postés 10 Date d'inscription mardi 1 janvier 2008 Statut Membre Dernière intervention 11 juin 2009 - 20 nov. 2008 à 20:51
anakin666 Messages postés 5 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 22 novembre 2008 - 22 nov. 2008 à 02:24
salut!
je suis en train de faire un PTI en Java pour mon BTS mais il commence déja à me faire des misères!
dans la fonction supprimer, il y a comme un souci sur la comparaison des deux chaine de caractères. il m'affiche toujours le message comme quoi mon id n'existe pas. j'ai mis des traces a différents endroits, et cela montre bien que le problème est sur cetet fameuse condition. pourtant j'utilise la meme fonction dans une autre fonction de mon programme et ca marche très bien! je sais plus quoi faire!!!!! un peu d'aide ne serai pas de refus!
merci

static public void supprimerSpectacle() throws IOException
 {
   boolean trouve = false;
    String code;
   String nom;
   String date;
   String lieu;
   String lecode;
   
   System.out.print("\nNumero du spectacle a supprimer : ");
   lecode = Cons.saisirChaine();
    
    File spectacle = new File("spectacle.dat");
    File spectacleTmp = new File("spectacletmp.dat");
   
    RandomAccessFile monFichier = new RandomAccessFile(spectacle, "r");
    RandomAccessFile monFichierTmp = new RandomAccessFile(spectacleTmp, "rw");
   
    Spectacle unspectacle = new Spectacle();
   
    // Tant que la fin de fichier n'est pas atteinte
    while (monFichier.getFilePointer() < monFichier.length())
    {
     System.out.println("test1");
     code = monFichier.readUTF();
    nom = monFichier.readUTF();
    date = monFichier.readUTF();
    lieu = monFichier.readUTF();


     
     // Si le numéro est celui recherché
     System.out.println(lecode);
     if (unspectacle.getCode().equals("HH"))
       {
      System.out.println("test2");
      trouve = true;
     }
     else
     {
      System.out.println("test3");
   
     monFichierTmp.writeUTF(code);
     monFichierTmp.writeUTF(nom);
     monFichierTmp.writeUTF(date);
     monFichierTmp.writeUTF(lieu);
 
     }
    }
    if (!trouve)
    {
    System.out.println("Spectacle à supprimer non trouvé");
    }
    else
    {
    System.out.println("Spectacle supprimé");
    }
     
   monFichier.close();
   monFichierTmp.close();
   
   spectacle.delete();
    spectacleTmp.renameTo(spectacle);
 }

9 réponses

Jynjyt Messages postés 10 Date d'inscription mardi 1 janvier 2008 Statut Membre Dernière intervention 11 juin 2009
20 nov. 2008 à 20:54
juste petit détail, la condition initiale de mon code était :

 if (unspectacle.getCode().equals(lecode))

mais j'ai essayé en saisissant directement une chaine de caractère (qui existe ds mon fichier) et il ne rentre toujours pas ds la boucle.

voila merci
0
Utilisateur anonyme
21 nov. 2008 à 05:34
Bonjour,

"et il ne rentre toujours pas ds la boucle."

Mais if (unspectacle.getCode().equals("HH")) est dans la boucle !

Ce ne serait pas plustot   while (monFichier.getFilePointer() < monFichier.length()) le fautif ?

Quel est exactement ton message d'erreur ?

Cordialement,

...\ Dan /...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 nov. 2008 à 07:09
Certaines sources de problèmes possible :
* La casse de ta chaîne, : "hh" est différent de "HH" ! Utilise alors un equalsIgnoreCase.
* Les espaces à gauches et à droite de la chaîne :
" HH " est différent de "hh", utilise alors un String.trim avant la comparaison.
0
Jynjyt Messages postés 10 Date d'inscription mardi 1 janvier 2008 Statut Membre Dernière intervention 11 juin 2009
21 nov. 2008 à 07:40
// Réponse pour Dan:

petite erreur de ma part je me suis mal exprimée, je voulais dire qu'il ne rentre toujours pas dans la condition IF. le while fonctionne très bien, et les traces montrent bien que tous le fichier est parcouru (j'ai 3 enregistrements et j'ai 3 fois "test1" "test3" .....);
je n'ai pas de message d'erreur lors de la compilation la seule chose qui est écrite à part les traces c'est l'affichage "Spectacle non trouvé" (c'est à dire que trouve=false).

// Réponse pour Darksidious:

j'ai essayé le equalsIgnoreCase, ça ne marche toujours pas
le String.trim par contre me renvoie une erreur

" trim() in java.lang.String cannot be applied to (java.lang.String) String.trim(lecode);   "

pourtant j'ai bien importé les bibliotheques de fonctions correspondantes.

Enfin bref, il se fout de moi ce programme!!

Si vous avez d'autres idées, j'écoute avce grand plasir!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
21 nov. 2008 à 08:23
Et   System.out.println(lecode); donne quoi ?

Peux-tu remplacer par   System.out.println("**" + lecode + **);

...\ Dan /...
0
Utilisateur anonyme
21 nov. 2008 à 08:35
Peux-tu remplacer par  



System.out.println("**" + lecode + **);





suivi de



System.out.println("**" +


unspectacle.getCode() + "**");






Pour voir ce que l'on compare à quoi  après?

...\ Dan /...
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 nov. 2008 à 08:59
Salut

Trim est une fonction d'instance et non une fonction static ;-)

Donc c'est
str1.Trim()
et non
String.Trim(str1)

Regardes si avec une codition comme ca, ca passe ?
if(
lecode.
Trim()
.compareToIgnoreCase(
unspectacle.getCode()
.Trim()) == 0)
0
Jynjyt Messages postés 10 Date d'inscription mardi 1 janvier 2008 Statut Membre Dernière intervention 11 juin 2009
21 nov. 2008 à 09:14
j'ai demandé a mon prof et finalement le probellem et résolu
en ft ct "unspectacle.getCode()" qui ne revoyé rien la chaine été vide car le ne stocké pas ce ke je lisais avec l'instruction code = monfichier;readutf
il manquais l'instruction unspectacle.setCode(code)

merci bcp qd mm
0
anakin666 Messages postés 5 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 22 novembre 2008
22 nov. 2008 à 02:24
Un petit conseil pour eviter les plantages avec le equals du au chianes vides : ecrit plutot "HH".equals(unspectable.getCode().

"HH" n'étant jamais nul, ca évite les plantages.
0
Rejoignez-nous