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 :

C'est moi ou "else if" ne sert a rien ?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chercheur d'Emploi
    Inscrit en
    Février 2017
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'Emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 86
    Par défaut C'est moi ou "else if" ne sert a rien ?
    Salut, ici on cherche simplement a retourner celui de a ou b qui est le plus proche de 10, en cas d'egalité on retourne 0.

    J'ai donc taper ça qui marche impec:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public int close10(int a, int b) {
      int difA = Math.abs(10-a);
      int difB = Math.abs(10-b);
     
      if (difA < difB)
        return a;
      else if (difB < difA)
        return b;
      else
        return 0;
    }
    Mais il se trouve que ceci marche tout aussi bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public int close10(int a, int b) {
      int difA = Math.abs(10-a);
      int difB = Math.abs(10-b);
     
      if (difA < difB)
        return a;
      if (difB < difA)        // la seule différence est sur cette ligne 7. Le "else if" est maintenant un simple if.
        return b;
      else
        return 0;
    }
    Ducoup j'ai du mal a comprendre dans quel cas "else if" apporte quelque chose de different qu'un simple "if" ?

  2. #2
    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
    Hello,

    Dans le cas où il n'y a pas de return à l'intérieur des if et qu'on n'a pas envie d'examiner les autres possibilités avant d'arrêter là.

    Par exemple, examiner les autres cas pourrait prendre du temps, ou bien provoquer des effets de bords qui sont nécessaires si on est arrivés à ce point-là, mais indésirables si on avait déjà trouvé la bonne solution.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Chercheur d'Emploi
    Inscrit en
    Février 2017
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'Emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 86
    Par défaut
    Ha en effet je viens de comprendre.

    En fait c'est tout con, "else if" n'est pas une fonction particuliere, c'est juste un "else" suivis d'un "if" quoi.


    Ducoup dans le code de mon premier post, si on est perfectioniste il est preferable de mettre "else if" pour optimiser la vitesse de compilation du programme ? Ou il est preferable de mettre seulement "if" pour épurer visuellement le code ?




    (Si jamais quelqu'un tombe un jour sur ce topic, je laisse l'exemple qui m'a permis d'appliquer la théorie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void main(String[] args)
      {
        String str = "";  
        if (1+1==2)
          str = "un plus un font deux";
        if (2+2==4)
          str = "deux plus deux font quatre";
        System.out.println(str);    
      }
    Sort "deux plus deux font quatre"

    Alors que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void main(String[] args)
      {
        String str = "";  
        if (1+1==2)
          str = "un plus un font deux";
        else if (2+2==4)
          str = "deux plus deux font quatre";
        System.out.println(str);    
      }
    Sort "un plus un font deux" )

    Merci thelvin.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu as aussi ce genre de cas :

    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
    19
     
    public int machinBidule(int a) {
     
      String resultat;
      if ( a<10 ) {
          resultat = 1;
      }
      else if ( a<500 ) {
          resultat = 2;
      }
      else if ( a<222000 ) {
           resultat = 3;
      }
      else {
           resultat = 4;
      }
      return resultat;
     
    }
    Avec des if seulement, il faudrait faire des comparaisons à 2 bornes, genre if ( a<=10 && a<100 ) ...... c'est plus simple et concis comme ça, et on évite de doubler des tests déjà fait, de se tromper dans les bornes ou l'opérateur. Et puis, le fait d'avoir à la fin le résultat quelque soit le test permet en plus d'enchaîner sur d'autres traitements éventuellement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 55
    Par défaut
    Bonjour,
    il faut surtout savoir que if -> else if sont lié alors que avec if ton programme effectuera les tests puisque les considerant comme differentes de la première alors qu'avec un if-else if la condition est testé une seule fois (dans le cas où la reponse est trouvé et abandonne directement le bloc) par exemple pour tes deux derniers bout de code le premier if (1 == 1) à la sortie str vaut bien le message renseigné mais ayant trouvé une autre condition detachée il la teste et ecrase l'ancienne valeur de str pour la remplacer par la nouvelle. Et pour ton deuxième il fait le test une fois ayant trouvé la condition vrai il affecte à str le message et sort du bloc de test ne testant pas le else if

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