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 :

[java]probleme de case dans switch [FAQ]


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 44
    Points : 28
    Points
    28
    Par défaut [java]probleme de case dans switch
    Bonjour,

    j'ai défini des variables de type final static public int sous la forme d'une incrémentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static private int DEBUT = 3000;
        static private int FIN = DEBUT;
    	final static public int A = FIN++;
    	final static public int B = FIN++;
    lorsque je fais un test sur ces variables dans un switch case j'ai ce message d'erreur :
    les expressions de case doivent correspondre à des expressions de constantes
    Lorsque je mets des valaures type 3001 3002... Pas de probleme. Mais le but de la manoeuvre c'était justement de laisser incrémenter tout seul. Pouvez-vous me donner une piste ?

    D'avance merci

  2. #2
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Bizarre !

    Montre voir le code de ton switch.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    switch (nomInstance.getTypeProjet()) {
    	case nomClasse.A:
    	//traitement

  4. #4
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    tu veux incrémenter des variables FINAL ???
    dans la declaration de ka classe...
    j ai du mal a suivre.
    Static n'est initialisé qu'une seul fois au premier appel d'une instance de la classe... enfin je dis ca mais j ai du mal a voir ce que tu veux faire

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    je n'incrémente qu'une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     static private int DEBUT
    elle n'est pas final. Les autres A, B... le sont mais je ne les incrémente pas

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Lorsque tu utilises FIN++ ton attribut final static n'est pas vraiment une constante.

    Explication :
    Lorsque tu écris le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class MaClass {
    	final static public int A = 3000;
    }
    MaClasse.A est une constante, et toutes ses occurences seront remplacé par sa valeur à la compilation, ainsi les deux codes suivants :
    Généreront un code source identique. Concrètement la référence à MaClasse.A sera perdu (c'est un peu comme le #define du C/C++).

    Donc cela marche très bien car dans le switch tu te retrouves avec quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    switch ( ... ) {
    	case 3000:
    		...

    Maintenant lorsque tu écris le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final static public int A = FIN++;
    A n'est pas une vrai 'constante' dans le sens où pour déterminer sa valeur il faut charger la classe afin de calculer la valeur de FIN et des différentes valeurs des attributs...

    Donc à la compilation, MaClasse.A n'est pas remplacé par sa valeur, mais on utilise sa référence , ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    switch ( ... ) {
    	case MaClasse.A:
    		...
    Or un switch ne peux être effectuée que sur des valeurs constantes et non pas sur des 'variable' même si elle sont final...


    Donc il faut que tu rentres les valeurs à la main...

    a++

  7. #7
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Ou que tu choississes une autre solution que le switch. :-)

    Une solution plus OO.

  8. #8
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Jai oublié... Si tu utilises Java 5.0, peut-être que le nouveau type enum serait plus approprié...

    a++

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    merci adiGuba pour cette explication.

    Je ne suis pas en java 5.0. Il faut que je voie avec le concepteur de l'idée.

    En tous cas merci beaucoup

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

Discussions similaires

  1. Position de default et case dans un switch
    Par Glutinus dans le forum C
    Réponses: 16
    Dernier message: 11/09/2006, 22h17
  2. [TSQL] Probleme de cast dans un case
    Par grandnico dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/09/2006, 10h57
  3. probleme avec jdbc dans un prog Java
    Par 18Marie dans le forum JDBC
    Réponses: 5
    Dernier message: 17/07/2006, 09h40
  4. [JDBC]problème de syntaxe dans une requête en java...
    Par chti_juanito dans le forum JDBC
    Réponses: 60
    Dernier message: 04/11/2005, 16h47
  5. Réponses: 6
    Dernier message: 26/01/2003, 13h45

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