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 :

Problème de comparaison avec paramètre Objet et chaine de de caractères


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Problème de comparaison avec paramètre Objet et chaine de de caractères
    Voila j'ai un problème avec ce code:

    private void rechtitre()
    {
    System.out.println("Entre dans la méthode");
    System.out.println("Quel est le titre du livre recherché?");
    Scanner sc=new Scanner(System.in);
    String rech = sc.next();
    System.out.println("Avant le IF");
    int i;
    for(i=0;i<nLivre;i++)
    {
    System.out.println("Entre dans le FOR");
    Livre l = catalogue[i];
    if(l.getTitre().equals(rech) )
    {

    System.out.println("Le livre est déja présent dans la catalogue"+l.getTitre());
    }
    else System.out.println("Le livre n'est pas présent");
    }
    }
    Dans mon cas, il n'entre même pas dans la boucle parce qu'il n'affiche que le "Avant le IF"...
    J'aimerais qu'il compare dans la valeur du titre d'un des livres avec la valeur du livre recherché..
    Je ne comprend pas vraiment pas pourquoi cela ne fonctionne pas

    Je vous met le code complet de ma classe principale au cas ou
    package labo3;

    import java.util.*;
    /**
    *
    * @author DequesneAllan
    */
    public class Bibliotheque
    {

    private Livre[] catalogue;
    private int nLivre = 0;


    public Bibliotheque()
    {
    System.out.println("Combien de livre maximum voulez vous introduire dans le catalogue?");
    Scanner sc=new Scanner(System.in);
    int maxl = sc.nextInt();
    catalogue = new Livre[maxl];
    int i;
    for (i=0;i<maxl;i++)
    {
    catalogue[i] = new Livre();
    }
    int choix = 5;
    while (choix > 4)
    {
    System.out.println("Que souhaitez vous faire?");
    System.out.println("[1]Ajouter un livre");
    System.out.println("[2]Rechercher un titre");
    System.out.println("[3]Rechercher l'ISBN d'un livre");
    System.out.println("[4]Sortir");
    Scanner ss=new Scanner(System.in);
    choix = ss.nextInt();
    }
    switch (choix)
    {
    case 1: ajout();
    break;
    case 2: rechtitre();
    break;
    case 3: rechIsbn();
    break;
    case 4: System.exit(0) ;
    break;
    }
    }

    private void ajout()
    {

    catalogue[nLivre] = new Livre();
    nLivre++;


    }
    private void rechtitre()
    {
    System.out.println("Entre dans la méthode");
    System.out.println("Quel est le titre du livre recherché?");
    Scanner sc=new Scanner(System.in);
    String rech = sc.next();
    System.out.println("Avant le IF");
    int i=0;
    for(i=0;i<nLivre;i++)
    {
    System.out.println("Entre dans le FOR");
    Livre l = catalogue[i];
    if(l.getTitre().equals(rech) )
    {

    System.out.println("Le livre est déja présent dans la catalogue"+l.getTitre());
    }
    else System.out.println("Le livre n'est pas présent");
    }
    }
    private void rechIsbn()
    {
    System.out.println("Quel est l'ISBN recherché?");
    Scanner sc=new Scanner(System.in);
    String isbn = sc.next();
    int i;
    for(i=0;i<nLivre;i++)
    {
    Livre l = catalogue[i];
    if(l.getIsbn().equals(isbn))

    {

    System.out.println(l);
    }
    else System.out.println("L'ISBN n'est pas présent");
    }
    }

    public static void main(String[] args)
    {
    Bibliotheque maBibli = new Bibliotheque();
    }
    }

  2. #2
    Membre éclairé

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Points : 791
    Points
    791
    Par défaut rajout du ps
    Bonjour,

    Vu que le programme n'affiche que "Avant le IF" et pas "Entre dans le FOR", c'est qu'il y a un problème sur les lignes entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            System.out.println("Avant le IF");
            int i = 0;
            for (i = 0; i < nLivre; i++) {
                System.out.println("Entre dans le FOR");
    Dans le for, le critère maximum utilisé est nLivre. Celui-ci n'est pas mis à jour lors de l'introduction initiale des livres. Pour la première recherche, nLivre = 0 et le programme ne rentre pas dans le for.

    Des traces avec System.out.println() peuvent t'aider à trouver ce genre de problème. Ou le mode debug aussi (si tu le connais déjà).

    Bon courage pour la suite.

    Benoit

    ps : après il faudra peut être amener d'autres corrections à ton code. Exemple : tu souhaites comparer les titres ou les isbn mais ils n'ont jamais de valeur affectée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par bboulch Voir le message
    Bonjour,

    Vu que le programme n'affiche que "Avant le IF" et pas "Entre dans le FOR", c'est qu'il y a un problème sur les lignes entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            System.out.println("Avant le IF");
            int i = 0;
            for (i = 0; i < nLivre; i++) {
                System.out.println("Entre dans le FOR");
    Dans le for, le critère maximum utilisé est nLivre. Celui-ci n'est pas mis à jour lors de l'introduction initiale des livres. Pour la première recherche, nLivre = 0 et le programme ne rentre pas dans le for.

    Des traces avec System.out.println() peuvent t'aider à trouver ce genre de problème. Ou le mode debug aussi (si tu le connais déjà).

    Bon courage pour la suite.

    Benoit

    ps : après il faudra peut être amener d'autres corrections à ton code. Exemple : tu souhaites comparer les titres ou les isbn mais ils n'ont jamais de valeur affectée.
    En effet, je ne pouvais rentrer dans ma boucle FOR car nLivre n'a pas été incrémenté et restait donc à 0
    Je viens de terminer le code de mon labo le voici
    Vous pensez que l'on peut l'améliorer?

    Voici les consignes de ce labo
    Modifiez le code de la classe Bibliothèque afin qu'elle comporte les variables d'instance catalogue ==> tableau de livres,nLivres==>Nombre de livres réellement instanciés dans le catalogue.

    Le code principal sera logé dans le constructeur de la classe Bibliotheque plutôt que dans la méthode main.Ce code principal débutera par la demande du nombre maximal de livres et instanciera le tableau correspondant en conséquence .Il proposera ensuite les opérations suivantes :

    1.Ajout d'un livre au catalogue
    2.Recherche des infos d'un livre sur base de son titre
    3.Recherche des infos d'un livre sur base de son isbn
    4.Fin

    Vous gèrerez les cas particuliers suivants :
    -Le catalogue est complet et il n'est plus possible d'y ajouter un nouveau livre.
    -Recherche infructueuse
    -Plusieurs livres portent le même titre // Pas encore trouvé la solution à ca :s
    -Mauvais choix dans le menu

    package labo3;

    import java.util.*;
    /**
    *
    * @author DequesneAllan
    */
    public class Bibliotheque
    {

    private Livre[] catalogue;
    private int nLivre = 0;

    public Bibliotheque()
    {
    System.out.println("Combien de livre maximum voulez vous introduire dans le catalogue?");
    Scanner sc=new Scanner(System.in);
    int maxl = sc.nextInt();
    catalogue = new Livre[maxl];
    int choix = 0;
    while (choix != 4)
    {
    System.out.println("Que souhaitez vous faire?");
    System.out.println("[1]Ajouter un livre");
    System.out.println("[2]Rechercher des information sur un livre à partir de son titre");
    System.out.println("[3]Rechercher des information sur un livre à partir de son ISBN");
    System.out.println("[4]Sortir");
    Scanner ss=new Scanner(System.in);
    choix = ss.nextInt();
    switch (choix)
    {
    case 1: ajout(maxl);
    break;
    case 2: rechtitre();
    break;
    case 3: rechIsbn();
    break;
    case 4: System.exit(0) ;
    break;
    }
    while ((choix !=4)&&(choix!=3)&&(choix!=2)&&(choix!= 1))
    {
    System.out.println("La valeur que vous venez de rentrer est incorrect");
    System.out.println("Que souhaitez vous faire?");
    System.out.println("[1]Ajouter un livre");
    System.out.println("[2]Rechercher des information sur un livre à partir de son titre");
    System.out.println("[3]Rechercher des information sur un livre à partir de son ISBN");
    System.out.println("[4]Sortir");
    Scanner sl=new Scanner(System.in);
    choix = sl.nextInt();
    switch (choix)
    {
    case 1: ajout(maxl);
    break;
    case 2: rechtitre();
    break;
    case 3: rechIsbn();
    break;
    case 4: System.exit(0) ;
    break;
    }
    }
    }
    }

    private void ajout(int maxl)
    {
    if (nLivre < maxl)
    {
    catalogue[nLivre] = new Livre();
    nLivre++;
    }
    else
    {
    System.out.println("[ATTENTION] LE NOMBRE DE LIVRE MAXIMUM DANS LE CATALOGUE EST ATTEIND");
    System.out.println("VOUS NE POUVEZ PLUS AJOUTER DE LIVRE DANS LE CATALOGUE");
    int choix = 0;
    while (choix != 4)
    {
    System.out.println("Que souhaitez vous faire?");
    System.out.println("[1]Rechercher des information sur un livre à partir de son titre");
    System.out.println("[2]Rechercher des information sur un livre à partir de son ISBN");
    System.out.println("[3]Sortir");
    Scanner ss=new Scanner(System.in);
    choix = ss.nextInt();
    switch (choix)
    {
    case 1: rechtitre();
    break;
    case 2: rechIsbn();
    break;
    case 3: System.exit(0) ;
    break;
    }

    while ((choix !=4)&&(choix!=3)&&(choix!=2)&&(choix!= 1))
    {
    System.out.println("LA VALEUR QUE VOUS VENEZ DE RENTRER EST INCORRECT");
    System.out.println("Que souhaitez vous faire?");
    System.out.println("[1]Ajouter un livre");
    System.out.println("[2]Rechercher des information sur un livre à partir de son titre");
    System.out.println("[3]Rechercher des information sur un livre à partir de son ISBN");
    System.out.println("[4]Sortir");
    Scanner sl=new Scanner(System.in);
    choix = sl.nextInt();
    switch (choix)
    {
    case 1: ajout(maxl);
    break;
    case 2: rechtitre();
    break;
    case 3: rechIsbn();
    break;
    case 4: System.exit(0) ;
    break;
    }
    }
    }
    }
    }

    private void rechtitre()
    {
    System.out.println("Quel est le titre du livre recherché?");
    Scanner sc=new Scanner(System.in);
    String rech = sc.next();
    int i=0;
    for(i=0;i<nLivre;i++)
    {
    Livre l = catalogue[i];
    if(l.getTitre().equals(rech) )
    {
    System.out.println("Le livre: " +l.getTitre()+" est présent dans la catalogue");
    System.out.println("ISBN: " +l.getIsbn());
    System.out.println("Prix: " +l.getPrix());
    System.out.println("Auteur " +l.getAuteurLivre());
    System.out.println("Editeur " +l.getEditeurLivre());
    }
    else
    if ((l.getTitre().equalsIgnoreCase(rech)) && (i == nLivre-1))
    System.out.println("LE LIVRE RECHERCHÉ N'EST PAS DANS LE CATALOGUE");
    }
    }
    private void rechIsbn()
    {
    System.out.println("Quel est l'ISBN recherché?");
    Scanner sc=new Scanner(System.in);
    String isbn = sc.next();
    int i;
    for(i=0;i<nLivre;i++)
    {
    Livre l = catalogue[i];
    if(l.getIsbn().equals(isbn))
    {
    System.out.println("L'ISBN: "+l.getIsbn()+" est présent dans le catalogue");
    System.out.println("Titre: " +l.getTitre());
    System.out.println("Prix: " +l.getPrix());
    System.out.println("Auteur " +l.getAuteurLivre());
    System.out.println("Editeur " +l.getEditeurLivre());
    }
    else
    if ((l.getTitre().equalsIgnoreCase(isbn))&&(i == nLivre-1))
    System.out.println("LE LIVRE RECHERCHÉ N'EST PAS DANS LE CATALOGUE");
    }
    }

    public static void main(String[] args)
    {
    Bibliotheque maBibli = new Bibliotheque();
    }
    }

  4. #4
    Membre éclairé

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Points : 791
    Points
    791
    Par défaut
    Oui, des améliorations sont envisageables.

    La première, pour le code posté dans le forum, je te conseille d'utiliser les balises CODE et non QUOTE.

    Ensuite, pour le code java, 2 pistes :
    1. Le code du menu est redondant ce qui n'est pas forcément utile ;
    2. Tester le code et vérifier qu'il correspond bien à tes attentes. Je viens de faire un test et j'ai eu le droit assez rapidement à un NullPointerException ;


    Benoit

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par bboulch Voir le message
    Oui, des améliorations sont envisageables.

    La première, pour le code posté dans le forum, je te conseille d'utiliser les balises CODE et non QUOTE.

    Ensuite, pour le code java, 2 pistes :
    1. Le code du menu est redondant ce qui n'est pas forcément utile ;


    Benoit
    Effectivement les deux codes du menu sont presque identique excepté le fait que j'ai juste rajouté la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("La valeur que vous venez de rentrer est incorrect");
    Pour réafficher le menu et en signalant que la valeur entrée n'était pas correct..

    Tester le code et vérifier qu'il correspond bien à tes attentes. Je viens de faire un test et j'ai eu le droit assez rapidement à un NullPointerException

    Effectivement j'ai une erreur que je n'arrive pas à résoudre lorsque l'utilisateur rentre un caractère au lieu d'un entier lorsque il fait son choix au menu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VB6 - Problème de compilation avec un Objet - Run-Time Error 91
    Par Hadware dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/12/2008, 22h13
  2. [XSL] Problème d'accents avec l'objet Transformer
    Par djoule6 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/04/2008, 20h19
  3. Problème de map avec paramètre template
    Par bouba dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2007, 14h19
  4. Problème affichage subreport avec paramètre
    Par gamma dans le forum iReport
    Réponses: 6
    Dernier message: 12/04/2007, 15h54
  5. Problème de lien avec paramêtre et facelets
    Par Tikaf dans le forum JSF
    Réponses: 2
    Dernier message: 08/01/2007, 12h14

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