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

Langage Java Discussion :

erreur de compilation


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut erreur de compilation
    Bonjour à tous,

    j'ai bute un peu là ( je vais me buter dans pas longtemps )
    j'ai une classe magasin, une classe panier , les deux ont des listes de Produits
    dans magasins j'ai des méthode, ajouter, rechercher vendre un produit etc...
    dans le panier j'ai ma méthode ajouter produit dans panier etc... je veux afficher le bilan des produits de mon panier, pour le nom et la quantité pas de pb, puisque je les saisie. Et comme je ne peux saisir les prix dans le panier, j'ai utilisé ma méthode dans magasin qui recherche le produit en fonction du nom, de façon à chercher le prix du produit se trouvant dans mon panier. et là j'ai java.lang.NullPointerException

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    //Méthode d'ajout produit dans la classe Panier
     public void ajouterProduitPanier(String nom, int Q) {
     
       stockPanier[nbProduitsPanier] = new Produit(nom, Q);
       nbProduitsPanier++;
     }
    //Méthode d'affichage bilan de mon panier
    public void afficherBilanPanier() {  // dans la classe panier
       Terminal.println("Liste de Produit contenu dans le panier");
       for (int i = 0; i < nbProduitsPanier; i++){
         Terminal.println("Produit: " + stockPanier[i].getNom() +
                          "\nQuantité: " + stockPanier[i].getQuantite() + 
                          "\nLe Total TTC : " +
                          (Magasin.getInstance().
                           rechercherProduit(stockPanier[i].getNom()).
                           getPrixVente()) *
                          (Magasin.getInstance().
                           rechercherProduit(stockPanier[i].getNom()).
                           getQuantite()) +
                     "\n--------------------------------------------------------");
       }
     
    /*cette méthode marche puisque quand je recherche un produit dans Magasin il me le trouve*/
    //-----------------------
    //Méthode de recherche produit par nom dans la classe Magasin
      public Produit rechercherProduit(String nom) {
        Produit result = null;
        boolean trouve;
        for (int i = 0; i < nbProduits; i++) {
          trouve = nom.equals(stock[i].getNom());
          if (trouve) {
            result = stock[i];
            break;
          }
        }
        return result;
      } //fin de la méthode rechercherProduit
    Merci de votre aide

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Salut,

    Il faudrait préciser à quelle ligne se produit ton erreur, et mettre le message d'erreur complet, sinon on ne peut pas t'aider.

    Pour t'aiguiller, en attendant, cette erreur apparait quand tu utilises un objet qui n'est pas défini (en gros, qui existe mais qui n'a pas de "valeur").
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut
    c'est à partir de là qu'il n'aime pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     (Magasin.getInstance().
    rechercherProduit(stockPanier[i].getNom()).getPrixVente()) *
     Magasin.getInstance().
    rechercherProduit(stockPanier[i].getNom()).getQuantite()) );

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Et bien soit Magasin.getInstance() n'est pas défini, soit rechercherProduit ne te trouve pas ton produit.
    A toi de voir...
    De toute façon, on n'a pas assez de code pour savoir si tous les objets que tu utilises sont correctement définis.
    Fais des vérifications intermédiaires avant d'afficher ta ligne à rallonge...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut
    getInstance marche très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     private static Magasin mag;
      public static Magasin getInstance(){   // comme ça ça m'évite de créer l'objet à chaque fois
      if(mag == null) mag = new Magasin();
       return mag;
      }
    j'ai comme l'impression que
    rechercherProduit(stockPanier[i].getNom()) me retourne null . et pourtant j'ai qqchose dans stockPanier[i].getNom().

    Merci de l'aide

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut
    voici le code entier de la classe panier
    Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    package Pack_Mag;
    public class Panier{
      private int nbProduitsPanier = 0;
      private Produit[] stockPanier = new Produit[1000];
     
     
     
      public Produit getStockPanier(int reference) {
       return stockPanier[reference];
     }
     
     public void ajouterProduitPanier(String nom, int Q) {
     
       stockPanier[nbProduitsPanier] = new Produit(nom, Q);
       nbProduitsPanier++;
     }
     
     public void ajouterLivrePanier(String nom, int Q) {
     
       stockPanier[nbProduitsPanier] = new Livre(nom, Q);
       nbProduitsPanier++;
     }
     
     public void afficherBilanPanier() {
       Terminal.println("Liste de Produit contenu dans le panier");
       for (int i = 0; i < nbProduitsPanier; i++){
         Terminal.println("Produit: " + stockPanier[i].getNom() +
                          "\nQuantité: " + stockPanier[i].getQuantite() +
                          "\nLe Total TTC : " +
                          (Magasin.getInstance().
                           rechercherProduit(stockPanier[i].getNom()).
                           getPrixVente()) *
                          (Magasin.getInstance().
                           rechercherProduit(stockPanier[i].getNom()).
                           getQuantite()) +
                     "\n--------------------------------------------------------");
       }
     
     
     }
     
     public Produit choisirProduit() {
       Terminal.println("Choisissez votre produit:");
       for (int i = 0; i < nbProduitsPanier; i++)
         Terminal.println(i + "-)> " + stockPanier[i].getNom());
       int indexProduit = Terminal.readInt("--");
       return stockPanier[indexProduit];
     }
     
     //Méthode pour décompter les produits du panier et leur quantité du stock magasin
     public void decompteStock(){
        for (int i = 0; i < nbProduitsPanier; i++) {
          Produit x = Magasin.getInstance().rechercherProduit(stockPanier[i].getNom());
          Magasin.getInstance().vendreProduit(x,stockPanier[i].getQuantite());
        }
      }
     
      //Méthode pour réinitialiser le chariot
      public void razPanier(){
        for (int i=0; i < nbProduitsPanier;i++){
          stockPanier[i] = null;
        }
      }
     
     
     public void interactionProduitPanier() {
           int choix = 0;
     
           while (choix!=4) {   // condition de sortie
             Terminal.println("_______________________________________________");
             Terminal.println("************Interface Gestion Panier**********");
             Terminal.println("_______________________________________________");
             Terminal.println("**********************");
             Terminal.println("Menu Gestion Panier");
             Terminal.println("**********************");
             Terminal.println("\t 1 --> Ajouter un produit du Chariot");
             Terminal.println("\t 2 --> Afficher un bilan");
             Terminal.println("\t 3 --> Payer");
             Terminal.println("\t 4 --> Quitter");
     
             choix = Terminal.readInt("");
             //switch est utilisé pour le choix
             switch (choix) {
     
             case 1: // Cas d'ajout de produit
               int choix_type = Terminal.readInt(
              "Quel type de produit voulez vous ajouter dans le panier:\n1 -)> Livre\n2 -)> Produit Standard");
                if (choix_type == 1){
                  String nomP = Terminal.readString("Titre du livre: ");
                  int Quantite = Terminal.readInt("Quantité : ");
                  ajouterLivrePanier(nomP,Quantite);
                }
                if (choix_type == 2){
                  String nomP = Terminal.readString("Nom du Produit: ");
                  int Q = Terminal.readInt("Quantité : ");
                  ajouterProduitPanier(nomP,Q);
                }
               break;
               //-------------------------------------------------------------
             case 2: // Cas d'afficharge du bilan
                  afficherBilanPanier();
               break;
             case 3: // Cas de paye
               int choix_paye = Terminal.readInt(
             "Pour quel type de payement opter vous : \n1 -)>Payement comptant \n2 -)> Payement différé");
                if (choix_paye ==1){
                  Terminal.println("**********************");
                  Terminal.println("Payement au comptant");
                  Terminal.println("**********************");
                  Terminal.println("Débit immédiat :");
                  Terminal.println("Payement de : \n");
                  for (int i=1;i<=nbProduitsPanier;i++){
                   Terminal.println("---------------");
                   stockPanier[i].getNom();
                   stockPanier[i].getPrixVente();
                   stockPanier[i].getQuantite();
                   Terminal.println("---------------");
                  }
                  //Méthode pour décompter les produits du panier et leur quantité du stock magasin
                  decompteStock();
                  //remise à zero du panier
                  razPanier();
                }
                  //Payement différé
                if (choix_paye ==2){
                    int choix_cli = Terminal.readInt(
                            "Êtes vous client: 1 -> oui \n2 -> non");
                    if (choix_cli == 1) {
                        String nomCli = Terminal.readString("Quel est votre nom ?");
                        //vérification client , si n'existe pas
                        //création client
                        //décompte du stock et réinitialisation du panier
                        decompteStock();
                        razPanier();
                    }
                }
               break;
             case 4:
                 Pack_Mag.MenuPrincipal.getInstance().viewMenu();
               break;
             } //fin switch
            } //fin while
          } //fin interractionProduit
    }

  7. #7
    Membre éclairé Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut
    Attention,je suis pas sûr du tout...

    Mais je crois que le problème se situe dans la valeur de retour de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Produit rechercherProduit(String nom)
    En effet:
    result n'est qu'une référence à un élément de tableau, qui est une référence à un Produit...

    Donc, il vaudrait mieux, je pense, définir dans la classe Produit une méthode clone() qui renverrait un Produit directement...


    Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //Méthode de recherche produit par nom dans la classe Magasin
      public Produit rechercherProduit(String nom) {
        Produit result = null;
        boolean trouve;
        for (int i = 0; i < nbProduits; i++) {
          trouve = nom.equals(stock[i].getNom());
          if (trouve) {
            result = stock[i].clone();
            break;
          }
        }
        return result;
      } //fin de la méthode rechercherProduit
    Je n'en suis pas du tout sûr, mais ça vaut le coup d'essayer, non?

    Désolé si ce n'est pas ça.

    Cordialement,

    spilliaert

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = stock[i].clone();
    ??
    je ne conaissais pas . tu peux me dire comment ça fonctionne?

  9. #9
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A implements Cloneable{
    ...
     protected Object clone() throws CloneNotSupportedException{
      return super.clone();
     }
    };
    ...
    public static void main(String[] args) throws CloneNotSupportedException {
    A a=new A();
    A b=(A)(a.clone());
    Ceci renvoie un nouvel objet et ne fait pas que créer une nouvelle référence sur le même objet.

  10. #10
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Citation Envoyé par MisterTee
    getInstance marche très bien.
    Je n'ai pas dit que ça ne marchait pas...
    Mais vu qu'il y a des cas où la méthode renvoie null...
    Je serais toi, je mettrai un petit System.out.println dans cette méthode pour débugguer, voir si elle trouve vraiment ce que tu veux... et qu'elle te l'écrive si jamais elle ne trouve pas...

    Citation Envoyé par MisterTee
    j'ai comme l'impression que
    rechercherProduit(stockPanier[i].getNom()) me retourne null . et pourtant j'ai qqchose dans stockPanier[i].getNom().
    Ce n'est pas incompatible.
    Tu initialises la valeur de retour à null au départ de la méthode, et elle ne change de valeur que dans le cas où elle trouve ce que tu lui passes en paramètre.
    Si elle ne trouve pas, elle retourne le null...

    Vérifie déjà qu'elle retourne vraiment une valeur différente de null avant d'aller jouer du clone...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut
    Merci pour cette belle analyse plegat
    je vais vérifier la valeur retourné par ma méthode rechercheProduit(). parcequ'il n'est pas normal qu'ielle me retourne null ( donc il n'a pas trouvé la valeur passé en paralmètre) or que j'ai bien qqchose dans stock[i].panier.
    stock[i].panier est rempli par la méthode ajouterProduitPanier().
    Je vais refléchir de cette manière car clone je connais pas encore.

    Merci de l'aide

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut
    J'ai isolé stockPanier[i].getnom comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public void afficherBilanPanier() {
       Terminal.println("Liste de Produit contenu dans le panier");
       for (int i = 0; i < nbProduitsPanier; i++){
         Terminal.println("Produit: " + stockPanier[i].getNom() +
                          "\nQuantité: " + stockPanier[i].getQuantite());
     
         Terminal.println("Le Total TTC : " +
                          (Magasin.getInstance().
                           rechercherProduit(stockPanier[i].getNom()).
                           getPrixVente()) *
                          (Magasin.getInstance().
                           rechercherProduit(stockPanier[i].getNom()).
                           getQuantite()) +
                     "\n--------------------------------------------------------");
       }
    en sortie :
    stockPanier[i].getNom() et stockPanier[i].getQuantite() me donnent bien des resultat.
    Mais Magasin.getInstance().
    rechercherProduit(stockPanier[i].getNom()).
    getPrixVente() me retourne null . Et pourtant le produit est bien existant dans Stock du Magasin. :/

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Par défaut
    j'ai corrigé le pb n'était pas dans recherche produit ni sctockPanier. Mais dans mon interaction, il créé des objet Magasin et Panier à n'en plus finir or que j'avais resolu cela sur la classe Magasin avec getInstance(). du coût j'ai refait pareil sur les autres et hop , ça marche comme sur des roulettes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            if (choix ==1) Magasin.getInstance().interactionProduit();
            if (choix ==2) Panier.getInstance().interactionProduitPanier();

    Merci à vous c'est vraiment gentil

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

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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