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 :

Constructeur avec un "if"


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Par défaut Constructeur avec un "if"
    Bonjour,

    J'ai un petite problème, lorsque j'appelle un constructeur en passant par un "if".

    Voici le code de mon programme :

    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 class Point {
    	int abscisse;
    	int ordonnee;
     
    	public Point(int x, int y) {
    		abscisse = x;
    		ordonnee = y;
    	}
     
    	public Point(int z) {
    		if (z == 0) {
    			this(0,0);
    		}
    		else this(1,1);
    	}
    }
    Quand j'appelle "this", j'ai une erreur : "Constructor call must be the first statement in a constructor".

    En fait j'ai l'impression que je dois impérativement appeler "this" à un "niveau 0", si je le met à l'extérieur des "if", cela marche très bien, mais ce n'est pas ce que je souhaite.

    Savez vous comment je pourrais régler ce problème?

    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Ce que tu veux faire n'est pas possible. Comme indiqué dans le message d'erreur, l'appel au constructeur est obligatoirement la première instruction.

    De la même manière, il est interdit de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	public Point(int z) {
    		int a = 9;
    		this(1,1);
    	}
    Du coup la solution est de faire quelque chose dans ce style:
    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
     
    public class Point {
    	int abscisse;
    	int ordonnee;
     
    	public Point(int x, int y) {
    		abscisse = x;
    		ordonnee = y;
    	}
     
    	public Point(int z) {
    		this(1,1);
    		if (z == 0) {
    			abscisse=0;
    			ordonnee=0;
    		}
    	}
    }

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ceci devrait peut etre faire l'affaire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public Point(int z) {
    			this((z==0)?0:1,(z==0)?0:1);
    }
    sinon y a cette possibilité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Point(int z) {
    			this(getInit(z),getInit(z));
    }
    private static int getInit(int z) {return z==0?0:1}

    Ou alors, comme déjà suggérer, appeler le constructeur normale (0,0) puis redéfinir les abscices

  4. #4
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,

    tu pourrais faire le test à l'intérieur de l'appel de this
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Point(int z) {
    	this((z==0?0:1), (z==0?0:1));
    }
    mais c'est pas très lisible comme code

    [EDIT] Raté

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Par défaut
    Merci, de vos réponses.

    Toutes ces méthodes fonctionnent très bien.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/06/2005, 12h50

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