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 Switch en java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Par défaut Problème de Switch en java
    Bonjour voila mon problème:

    je fais un exercice ou je dois faire une méthode d'instance pour comparer le nombre de pages entre 2 instances de Livre et cela avec un Switch.

    voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public int compare1(Livre l) {
        int a=l.getNbPages();
        switch (nbPages){
        case a : 
        return 0;
        break;
        default:
        if(nbPages>l.nbPages)
        return 1;
        else
        return -1;
        }
      }
    Mon erreur à la compilation me dit qu'il faut une constante dans le premier case, or a est une constante.

    Merci de votre aide!

  2. #2
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    a n'est pas une constante, même si effectivement dans ton programme elle ne va pas changer, le compilateur n'a aucun moyen de le savoir.
    Pour lui garantir, il faut lui déclarer qu'elle ne va jamais changer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        final int a=l.getNbPages();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Par défaut
    Même en rajoutant final la même erreur apparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     public int compare1(Livre l) {
        final int a=l.getNbPages();
        switch (nbPages){
        case a: 
        return 0;
        break;
        default:
        if(nbPages>l.nbPages)
        return 1;
        else
        return -1;
        }
      }
    Constant expression required

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Mhhh effectivement, j'avais testé avec un final int a = 0. Dans ce cas j'imagine que le compilateur se rend compte qu'il peut remplacer dans le case par la valeur qui a été affectée en dur.

    Dans ce cas, le mieux est de passer par la différence (l.getNbPages() - nbPages) et de comparer avec 0.
    Cela dit, si c'est pour mettre un if à l'intérieur, c'est un peu curieux (enfin c'est bizarre à la base de vouloir passer par un switch dans ce cas). Si le nb de pages est maxé à petite valeur, tu peux mettre tous les cas ... ça reste vilain.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Par défaut
    En fait la méthode je l'ai déjà faite avec un if et elle marche très bien mais il demande de la faire avec un while aussi dans l exercice...

    Je ne comprends pas pourquoi cela ne marche pas.

    Merci quand même, je demanderais lundi en cours.

  6. #6
    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 alex4444 Voir le message
    Même en rajoutant final la même erreur apparait :
    final ne permet pas à lui seul de définir une constante. Ici tu as une variable avec une valeur fixe, mais qui ne peut pas être déterminée à la compilation.

    Les valeurs des constantes sont connu à la compilation, ce qui permet au compilateur de les utiliser correctement.


    Citation Envoyé par alex4444 Voir le message
    Merci quand même, je demanderais lundi en cours.
    Oui c'est très bizarre de vouloir faire cela avec un switch

    a++

    [edit] grillé

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Les cases d'un switch doivent être des expressions constantes, pas seulement des variables finales.

    Une variable finale n'aura pas la même valeur d'un appel à l'autre de la méthode. Une expression constante, si. En fait, sa valeur est connue du compilateur.

    Exemples d'expressions constantes :

    3
    1 + 5

    Et si on a quelque part :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static final int ZERO = 0;
    ZERO
    ZERO + 5
    ZERO * ZERO
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problème de switch-case ou de buffer ?
    Par Gilouou dans le forum C
    Réponses: 8
    Dernier message: 11/11/2006, 21h08
  2. Problème de date avec JAVA & Oracle
    Par bobic dans le forum JDBC
    Réponses: 2
    Dernier message: 02/11/2006, 12h21
  3. problème d'execution programme java
    Par mel_gasy dans le forum EDI et Outils pour Java
    Réponses: 6
    Dernier message: 08/10/2006, 01h29
  4. [Cookies] problème de switch
    Par artotal dans le forum Langage
    Réponses: 1
    Dernier message: 28/12/2005, 02h35
  5. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37

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