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 :

Problème de variables peut être pas intialisées


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Par défaut Problème de variables peut être pas intialisées
    Bonjour ou re,

    encore un soucis avec le désormais célèbre prog de banque.

    Eclipse me dit que "la variable locale mt n'est peut être pas initialisée" au niveau du ** mais pas dans le reste alors que mt est utilisé plusieurs fois.

    Même soucis du même genre (La variable locale un_compte n'a peut-être pas été initialisée) ou il y a les ****.

    Je capte pas pkoi il me prend "un_compte" en variable.

    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
     
    public void VirerDecompAcomp()
    	{
    		int indice, dimension, rep, comptadebit;
    		boolean trouve;
    		Compte un_compte;
     
    		double mt;
     
    		dimension = tbanque.size();
    		indice=0;
    		trouve=false;
    		String valeur;
     
     
    		Utilitaire.ecrire("Affichage des comptes");
    		afficher_comptes();
    		Utilitaire.ecrire("Entrez le numéro de compte à débiter");
    		rep=Utilitaire.lireEntier();		
     
    		while ((indice<dimension) && (trouve == false))
    		{
    			un_compte= (Compte) tbanque.get(indice);
    			if (un_compte.n_compte==rep)
    			{
    				trouve=true;
    				Utilitaire.ecrire(" Entrez le montant du virement ");
    				valeur=Utilitaire.lireChaine();
    				mt = Double.parseDouble(valeur);
    				un_compte.retrait(mt);
    			}
    			indice=indice+1;
    		}
    		if (trouve==false)
    		{
    			Utilitaire.ecrireLigne(" Compte à débiter inconnu ");
    		}
    		else
    		{
    			Utilitaire.ecrire("Affichage des comptes");
    			afficher_comptes();
    			Utilitaire.ecrire("Entrez le numéro de compte à créditer");
    			rep=Utilitaire.lireEntier();		
     
    			while ((indice<dimension) && (trouve == false))
    			{
    				un_compte= (Compte) tbanque.get(indice);
    				if (un_compte.n_compte==rep)
    				{
    					trouve=true;
    					un_compte.depot(mt);**
     
    				}
    				indice=indice+1;
    			}
    			if (trouve==false)
    			{
    				Utilitaire.ecrireLigne(" Compte à créditer inconnu, , compte débité : recrédité ");
    				****un_compte.depot(mt);**
    			}
    			else
    			{
    				Utilitaire.ecrireLigne(" Virement effectué ");
    			}
    		}
    	}
    Voici le début de la classe "Compte" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Compte {
    	public int n_compte;
    	private Client tTitulaire;
    	private double solde;
     
    	Compte()
    	{
    		n_compte=0;
    		tTitulaire=new Client();
    		solde = 0.0;
    	}
    Merci encore pour toute votre aide.

    A+

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    C'est normal, mt est initialisé dans une condition, donc rien ne dit qu'il sera initialisé au moment ou tu vas l'employer, il faut donc l'initialiser à une valeur par défaut, 0.0 par exemple

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Par initialisation il est question d'instanciation.
    Lorsque tu déclare tes variables, tu ne les instancie pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Compte un_compte;
    double mt;
    Il te faut les initialiser (notamment le Compte ou tu risque une NullPointerException).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Compte un_compte = new Compte();
    double mt = 0.0;
    [edit]grilled[/edit]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Facile, ta variable mt a été déclarée comme ça : double mt; donc elle est pas initialisée.
    Ensuite, tu fais mt = Double.parseDouble(valeur); mais cette instruction est incluse dans un if ! Si jamais tu ne passes pas dans le if car la condition pour y rentrer n'est pas satisfaite, alors ta variable mt ne sera jamais initialisée... capitch ?

    Une solution est de déclarer ta variable en faisant double mt = 0.0 ;.
    Une autre est de mettre un bloc else à ton if et de donner une valeur à mt dedans.

    ++

    EDIT : grilled aussi

  5. #5
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Par défaut
    lol là j'ai été bien nul, j'avais pas fais gaffe que je l'avais déclaré mais pas initialisé.

    dsl

    merci d'avoir relevé ma grosse erreur.

    par contre j'ai toujours le problème à ce niveau là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Utilitaire.ecrireLigne(" Compte à créditer inconnu, , compte débité : recrédité ");
    un_compte.depot(mt);
    merci d'avance

  6. #6
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Quelle erreur ?

  7. #7
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Tu peux nous montrer ta méthode "depot" de la classe compte ?

  8. #8
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Par défaut
    excusez moi j'ai voulu aller vite, il y avait la prof d'éco qui approchait lol.

    HS : l'éco c nul ... vive le dev

    En fait l'erreur qu'eclipse me donne, c'est :

    "La variable locale un_compte n'a peut-être pas été initialisée"

    Alors que "n_compte" n'est pas une variable et que je m'en suis servi exactement comme d'habitude.

    Merci encore

  9. #9
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    remplaces

    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Compte un_compte = null;

  10. #10
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    meme cause, meme resultat :
    un_compte est une instance qui a juste été déclarée, et elle est settée seulement dans des boucles while() => il se peut que cette variable ne soit jamais affectée.

    Par défaut tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Compte un_compte = null;

  11. #11
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    thibaut trop rapide !!

  12. #12
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Par défaut
    pourtant le fait de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Compte un_compte = null;
    je ne l'ai jamais fais et cela a toujours marché.

    par contre là, sa marche lol

    merci beaucoup

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Par défaut
    Je vais en profiter pour poser une petit question vu que ce genre de sujet ne se voit pas souvent.

    Déclarer une variable :
    int intNombre;

    Initialiser une variable == instancier une variable :
    intNombre = 0; //Ou null, mais ça va pas pour les integer

    Affecter une valeur a une variable :
    intNombre = 12;

    Et quand on fait une nouvelle variable en général on la déclare et on l'initialise/instancie :
    int intNombre = 0;


    Est-ce que c'est juste ou je me trompe dans les termes? Pcq j'ai jamais vraiment su à quelle opération correspondait quel terme

    Merci d'avance

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Bloodscalp
    Déclarer une variable :
    int intNombre;

    Affecter une valeur a une variable :
    intNombre = 12;
    C'est exactement cela.

    Citation Envoyé par Bloodscalp
    Initialiser une variable == instancier une variable :
    intNombre = 0; //Ou null, mais ça va pas pour les integer
    Attention : initialiser n'est pas la même chose qu'instancier.

    Initialiser signifie que tu affectes une variable pour la première fois : c'est sa valeur initiale.
    Cela peut se faire en général en ligne à la déclaration :
    Mais également après leurs déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int intNombre; // variable non initialisé
     
    // ... code ...
     
    intNombre = 12; // initialisation de la variable
    Mais dans ce cas on ne peut pas utiliser cette variable AVANT de l'avoir initialisé.

    A noter que les attributs d'instance non-final sont automatiquement initialisé à la déclaration avec une valeur par défaut selon leurs types ( 0 pour les primitifs numérique/char, false pour les booléen, et null pour les objets).




    Enfin l'instanciation concerne la création d'une nouvelle instance d'un objet en mémoire avec le mot clef new :
    Ainsi dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Object o1 = new Object();
    Object o2 = o1;
    L'objet o1 est déclaré et initialisé en ligne avec la référence obtenu par l'instanciation d'un nouvel objet.
    L'objet o2 est déclaré et initialisé en ligne avec une référence existante.


    Je ne sais pas si je suis clair

    a++

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Par défaut
    Oui c'est très clair.

    Merci pour ces précisions.

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

Discussions similaires

  1. Eliminer 'La variable n'est peut-être pas initialisée'
    Par GoustiFruit dans le forum Débuter
    Réponses: 11
    Dernier message: 28/06/2012, 15h50
  2. Réponses: 20
    Dernier message: 02/02/2008, 23h14
  3. Problème réactivation Vista peut-être insoluble?
    Par ombre6 dans le forum Windows Vista
    Réponses: 7
    Dernier message: 29/08/2007, 00h17
  4. problème d'apostrophe peut-être
    Par ballantine's dans le forum Langage
    Réponses: 4
    Dernier message: 05/07/2007, 16h07
  5. Réponses: 3
    Dernier message: 15/06/2006, 17h43

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