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 :

Switch/case et comparaison de type gt/lt


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut Switch/case et comparaison de type gt/lt
    Bonjour,

    Je progresse au fur et à mesure en Java...
    Je souhaiterai effectuer un switch/case en vérifiant une plage d'entiers de la façon suivant (mais cela ne fonctionne pas):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Switch (monEntier) {
      case monEntier >= 1 && monEntier <= 5 :
        instruction;
        break;
      case monEntier >= 6 && monEntier <= 10 :
        instruction2;
        break;
    }
    Cela me semble être plutôt basique - bloqué je l'ai fait avec des if/else if mais c'est tout de suite moins... "sexy".

    Merci d'avance pour votre aide!

    SR

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch(monEntier) {
        case 1: case 2: case 3: case 4: case 5:
            traitements();
            break;
        case 6: case 7: case 8: case 9: case 10:
            traitements2();
            break;
    }
    C'est quand même mieux avec des if/else (faut dire, c'est fait pour ça)

  3. #3
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut yes but...
    Merci pour ta réponse, cpdt je voudrais faire qqchose d'un peu plus élaboré du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Switch (monEntier) {
      case monEntier >= 1054800 && monEntier <= 1100200 :
        instruction;
        break;
      case monEntier .....
    }
    donc je ne me vois pas faire la chose suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    switch(monEntier) {
        case 1054800 : case 1054801 : case 1054802 : ..... :
            traitements();
            break;
    dans ce cas retour aux if/else !!

  4. #4
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Oui, c'est impossible, le switch... case... fonctionne sur une expression qui renvoie une valeur entière uniquement avant Tiger et sur la même chose et les énumérations pour Tiger.

    A+

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par sroux
    Merci pour ta réponse, cpdt je voudrais faire qqchose d'un peu plus élaboré du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Switch (monEntier) {
      case monEntier >= 1054800 && monEntier <= 1100200 :
        instruction;
        break;
      case monEntier .....
    }
    donc je ne me vois pas faire la chose suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    switch(monEntier) {
        case 1054800 : case 1054801 : case 1054802 : ..... :
            traitements();
            break;
    C'est pour ça que le if/else existe

  6. #6
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Le switch case du java est limité, je pense que c'est pour des raisons historiques qui viennent du langage C. Dans ce langage la limitation des switch case permet de gagner en terme de vitesse d'exécution.

    À partir du moment où les cases sont des constantes, le compilateur peut faire des optimisations très performantes dans la détermination du bon choix. En particulier, il ne passe pas son temps à vérifier si tel cas convient, mais il saute directement au bon cas, chose qu'il ne peut pas faire avec le if else.

    Voilà pour la minute de philosophie historique.

  7. #7
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Citation Envoyé par spekal
    Le switch case du java est limité, je pense que c'est pour des raisons historiques qui viennent du langage C.
    Totalement faux, en C tu veux faire des switch... case... sur des chaînes de caractère, pas en Java...

  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
    Citation Envoyé par thibaut
    Totalement faux, en C tu veux faire des switch... case... sur des chaînes de caractère, pas en Java...
    Cela revient à faire un switch/case sur l'adresse mémoire du tableau représentant la chaine de caractères. Donc les chaînes ne sont pas vraiment comparées et tu peux avoir des résultats aléatoires (tout comme la comparaison avec == au lieu d'equals() en Java).

    D'ailleurs je pense que les compilateurs C doivent sûrement généré un warning dans ces cas là...

    a++

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/05/2006, 13h00
  2. switch case pour deux variable en meme temps
    Par petitours dans le forum C
    Réponses: 3
    Dernier message: 06/11/2005, 19h20
  3. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37
  4. probleme gestion condition switch - case
    Par DarkMax dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2005, 14h25
  5. [Language] aide sur les switch case
    Par pouss dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2005, 11h34

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