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 :

[Language][Compilateur]Objets et structures conditionnelles


Sujet :

Langage Java

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 128
    Points : 122
    Points
    122
    Par défaut [Language][Compilateur]Objets et structures conditionnelles
    Bonjour à tous!

    - Je ne comprends pas pourquoi quand je créé un objet dans une structure conditionnelle, et que je fais appel à une donnée membre de ce même objet après la structure conditionnelle, le compilateur affiche une erreur, car il ne reconnaît pas l'objet.

    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
    class Ggg{
     
        public static void main(String[] args){
     
    	//Création de la référence joueur1 à partir de la classe ScorePlus
    	ScorePlus joueur1;
     
    	    if(args.length==1){
    		joueur1 = new ScorePlus(args[0]);
    	 }
     
    	    else{System.out.println("erreur!");}
     
    	    //affiche à l'écran la donnée membre nom de l'objet joueur1
    	    System.out.println(joueur1.nom);
        }
    }
    - Par contre quand je fais référence à l'objet dans la structure conditionnelle, la compilation se fait sans problèmes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Ggg{
     
        public static void main(String[] args){
     
    	ScorePlus joueur1;
     
    	    if(args.length==1){
    		joueur1 = new ScorePlus(args[0]);
    		System.out.println(joueur1.nom);
    	 }
     
    	    else{System.out.println("erreur!");}
        }
    }

    Merci Bien!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    Salut,
    probablement que dans le else l'objet est null puisque non initialisé;
    A+

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

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je ne suis pas sur de ce que je dis, mais à l'intérieur de la structure conditionnelle, le compilateur est sur que cette variable a été initialisé alors qu'en dehors de la structure elle n'a peut etre pas etre initialisé

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 84
    Points
    84
    Par défaut
    Essayes avec :

    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
    class Ggg{ 
     
        public static void main(String[] args){ 
     
       //Création de la référence joueur1 à partir de la classe ScorePlus 
       ScorePlus joueur1 = null; 
     
           if(args.length==1){ 
          joueur1 = new ScorePlus(args[0]); 
        } 
     
           else{System.out.println("erreur!");} 
     
           //affiche à l'écran la donnée membre nom de l'objet joueur1 
           System.out.println(joueur1.nom); 
        } 
    }
    Je suis d'accord avec l'explication de wichtounet. Pour le compilateur les variables locales ont besoin d'être toujours initialiés.
    Essayes en l'initiliasant seulement avec null au début de ta méthode.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Points : 11
    Points
    11
    Par défaut [Debug] Objets et structures conditionnelles
    La structure conditionnnelle te permet dans le cas où le nombre d'arguments vaut 1 d'instancier l'objet jouer1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(args.length==1){
          joueur1 = new ScorePlus(args[0]);
    }
    Dans le esle tu ne fais qu'afficher un message, sans instancier ce même objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    else{
          System.out.println("erreur!");
    }
    Ensuite en dehors de la structure conditionnnelle, tu affiches un attribut de l'objet. Or si tu n'as pas d'argument ou si le nombre d'arguments est supérieur à 1, l'objet ne sera jamais instancié. Ce qui lèverait une exception si le compilateur n'indiquais pas une erreur.

    Celui -ci ne t'indique pas qu'il ne reconnaît pas l'objet. Mais que l'objet n'a pas été instancié lors de sa déclaration et qu'il existe un cas où il ne sera pas instancié (dans le else).

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 128
    Points : 122
    Points
    122
    Par défaut
    Merci à vous 4.

    Je ne savais pas que le compilateur exigeait que les objets soient instanciés dans tous les cas de figure, quand on fait appel par la suite à une de ses variables.

    J'ai réécrit le programme en mettant le message d'erreur dans une structure conditionnelle à part en début de programme, et ça fonctionne.

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

Discussions similaires

  1. IF ( Structure conditionnelle ) MYSQL
    Par Eric45 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 26/08/2013, 18h59
  2. [VBA-E]Structure conditionnelle sur plusieurs variables
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/07/2007, 14h30
  3. structure conditionnelle dans la clause where
    Par liberty74 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2007, 23h18
  4. [XSLT]la structure conditionnelle.
    Par Extra-Nitro dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 22/08/2006, 13h46
  5. [Language][GC] objet
    Par c-top dans le forum Langage
    Réponses: 16
    Dernier message: 28/04/2005, 15h03

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