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 :

Erreur dans mon programme


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    informatique
    Inscrit en
    Novembre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 167
    Points : 88
    Points
    88
    Par défaut Erreur dans mon programme
    Bonjour,

    J'ai beau chercher et modifier certaines parties du code mais je n'arrive pas à trouver ce qui ne va pas, mon programme plante.

    Voici mon code

    Classe Compte
    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
    public class Compte {
     
    private float solde;
    private int numero;
     
    void depot(float valeur)
    { solde =solde+valeur;
        }
    void retrait(float valeur)
    {   if (solde>0)
        solde=solde-valeur;
        }
    float getsolde()
    { return solde;}
     
     void affichesolde()
     {
         System.out.println("votre solde est de "+solde);
     }
     void virer(float valeur, Compte destinataire)
     { destinataire.depot(valeur);
     
     }
     int getnumero()
     {
         return numero;
     }
    }
    Classe Client
    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
    import java.util.Scanner;
     
    public class Client {
     
     private Compte [] comptes=new Compte[100];
    private String nom ;
    private int nbcompte=0;
     
    public Client(String nomc)
    {nom=nomc;// on donne un nom au client
    ajoutercompte();
        }
    void ajoutercompte()
    {   nbcompte++;
        comptes[nbcompte]=new Compte();
    }
     
    String getnom()
    {return nom;
        }
     
    float totalsolde()// retourne le somme des solde des compte d'un client
    {float somme=0;
        for(int i=0;i<nbcompte;i++)
    {somme =somme+comptes[i].getsolde();
        }
    return somme;
     
        }
     
    public Compte getCompte(int numero) {
        return comptes[numero];
        }
     
     void affichesolde()
     { System.out.println("le solde total de client est"+totalsolde());
     }
     
    public void afficherbilanc()
    {System.out.println("afficher le bilan du client!!!"+nom);
    for(int i=0;i<nbcompte;i++)
        System.out.println("le solde du compte numero "+i+"est de "+comptes[i].getsolde());}
     
    void interactioncli()
    {Scanner  sc =new Scanner(System.in);
    int choix=0;
    Boolean test=true;
    while(test==true)
        {System.out.println("**********MENU CLIENT********");
    System.out.println("quelle operation voulez vous effectuer sur le client?"+nom);
    System.out.println(" 1) Faire un dépot");
    System.out.println(" 2) Faire un retrait");
    System.out.println(" 3) Faire un virement");
    System.out.println(" 4) Créer un compte");
    System.out.println(" 5) Afficher le bilan des comptes");
    System.out.println(" 6) Revenir au menu princial");
     choix =sc.nextInt();
      switch(choix){
      case 1: {
     
      }
        }
    }
    }
    }
    Classe Banque
    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
    import java.util.Scanner;
     
    public class Banque {
     
        private Client [] clients=new Client[100];
        private int nbclients=0;
     
        void ajouterClient(String nom)
         {nbclients++;
            clients[nbclients]=new Client(nom);
     
          }
        int getnbclients()
        {return nbclients ;}
     
         void afficherbilan()
         { for(int i=0;i<=nbclients;i++)
         clients[i].afficherbilanc();    
    }
         public void interaction()
         {boolean test=true;
         Scanner  sc =new Scanner(System.in);
         int choix;
         String nomm;
     while(test)
     { System.out.println(" **********MENU   BANQUE***********");
             System.out.println("quelle operation vous les vous effectuer?");
             System.out.println("1-Ajouter un client");
             System.out.println("2-effectuer une operation sur un client");
             System.out.println("3-afficher un bilan genrale");
             System.out.println("4-sortir!!!");
             choix =sc.nextInt();
             switch(choix)
             { case 1: {System.out.println(" entrez le nom du client");
                         Scanner  scc =new Scanner(System.in);
                         String nom =scc.nextLine();
                          ajouterClient(nom);
                          System.out.println("le nb de clients est "+this.getnbclients());
     
                         System.out.println("le client   "+this.clients[getnbclients()].getnom()+" a bien été ajouté");
                         }
             break ;
             case 2:{       System.out.println("sur quel client?");
                             Scanner  src = new Scanner(System.in);
                             String nom = src.nextLine();
                             System.out.println("22222");
                             for(int i=0;i<=nbclients;i++)
                             {       System.out.println("wa33333333333"); 
                                 nomm=clients[i].getnom();
     
                                 if( nom.equals(nomm))
                                 {System.out.println("2222222222222222222");
                                       clients[i].interactioncli();}
                                  else  
                                       System.out.println("le client n'existe pas desolé  :/");    
                             }
             }
             break  ;
             case 3:{//System.out.println(" :/");    
                       // afficherbilan();}// y'a un pb
                  for( int i=0;i<nbclients;i++)
                  {System.out.println("le nom du client est "+clients[i].getnom());
     
                  }
             }
             break;
             case 4: { System.out.println(" ravie de vous a voir aidé :D");
                       test=false;}
             break ;
             }
     
         }
         }
    }
    Classe Test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Test {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            Banque banquefe=new Banque();
            banquefe.interaction();
        }
    }
    L'opération 1-Ajouter un client fonctionne, cependant lorsque je tente l'opération 2-effectuer une operation sur un client mon programme plante au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomm=clients[i].getnom();
    Pourquoi je ne sais pas.
    J'ai beau chercher, je n'ai rien trouvé.

    Pour information, les System.out.println m'aident à localiser l’arrêt, ce qui explique les suites de 22222 et de 333.

    Quelqu'un saurait-il m'indiquer ce qui pose problème ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Pourtant, le "pourquoi" est clair. L'erreur est une NullPointerException.
    Ça veut dire que l'un des objets que tu essaies d'utiliser est null.

    Sur la ligne que tu nous montres, ça peut être deux choses :
    - ou bien le tableau clients.
    - ou bien ce qu'il contient à l'index i, clients[i].

    Un peu de debugging devrait te permettre d'y voir plus clair.

    Aussi, tu aurais moins de mal à corriger tes programmes si tu les écrivais lisiblement.
    Une première chose à faire serait d'indenter correctement.
    Une seconde chose à faire serait de donner des noms sensés à tes variables (les classes et les méthodes, ça va assez bien pour l'instant.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Profil pro
    informatique
    Inscrit en
    Novembre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 167
    Points : 88
    Points
    88
    Par défaut
    franchement j'ai essaiyé toute les combinaisons possible , rien a faire ,
    le tableau se remplie lorsque je crée le premier client , j'accede au nom via l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("le client   "+this.clients[0].getnom()+" a bien été ajouté");
    le nom du premier client est renvoyé , donc je crée bien mon clients a chaque fois ,
    je pense que le probleme viens de l'indice i , mais je n'ai pas su le corrigé (j'ai changé de boucle while toujours rien :/)

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	void ajouterClient(String nom)
    	 {nbclients++;
    	    clients[nbclients]=new Client(nom);
     
    	  }
    Donc le premier client que tu stocke est à l'indice 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		 				for(int i=0;i<=nbclients;i++)
    		 				{   	System.out.println("wa33333333333"); 
    		 				    nomm=clients[i].getnom();
    Hors tu commencer à lire à l'indice zéro, d'où ton problème. Le premier élément du tableau est null. Stocke correctement ton premier client à l'indice 0, ton deuxième à l'indice 1, etc.

  5. #5
    Membre régulier
    Profil pro
    informatique
    Inscrit en
    Novembre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 167
    Points : 88
    Points
    88
    Par défaut
    ouii tout a fait , voila comment j'ai arrangé ma methode , mais le probleme n'est tjrs pas resolue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void ajouterClient(String nom)
    	 {   if(nbclients==0)
    	    {clients[nbclients]=new Client(nom);
    	       nbclients++;}
    	 else { nbclients++;
    	 clients[nbclients]=new Client(nom);}
     
     
    	  }
    plus exactement quand j'essai ce bout de code mon programme plante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int j=0;j<=nbclients;j++)
    {  System.out.println("w33333333333"); 
       nomm=this.clients[j].getnom();
    	if( nom.equals(nomm))	 						 					                 {System.out.println("2222222222222222222");
      clients[j].interactioncli();}
    else  
    System.out.println("le client n'existe pas desolé  :/");	
    		 				}

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est quoi cet arrangement bidon? Tu as déplacé ton problème de la case 0 à la case 1! Réfléchi à ce que tu écrit. Là tu dit "si c'est le premier client, on incrémente après, si c'est le deuxième, on incrémente avant. Quelle est la logique là derrière?

  7. #7
    Membre régulier
    Profil pro
    informatique
    Inscrit en
    Novembre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 167
    Points : 88
    Points
    88
    Par défaut
    ouii tu a raison , j'ai pensé a autre chose ,mais ce n'etait pas la peine d'etre aggressif , tout le monde n'est pas un as en programmation
    merci

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

Discussions similaires

  1. Erreur dans mon programme que je n'arrive pas à corriger
    Par alex7443 dans le forum Débuter
    Réponses: 3
    Dernier message: 25/03/2009, 14h46
  2. Réponses: 1
    Dernier message: 18/04/2008, 04h33
  3. je ne trouve pas l'erreur dans mon programme
    Par Briska dans le forum Débuter
    Réponses: 19
    Dernier message: 04/04/2008, 09h21
  4. [Help] Erreurs dans mon programme
    Par Tacha dans le forum Langage
    Réponses: 13
    Dernier message: 02/10/2006, 13h57
  5. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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