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 :

Récursivité et return


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut Récursivité et return
    Bonjour,
    Je viens d'écrire une fonction récursive en Java, pas de souci elle marche bien.
    Mon soucis est que netbeans me dit qu'il manque un return, du coup j'ai fait un return null; à la fin tout en sachant qu'il ne sera jamais appelé.
    Pourquoi il me dit ça ?
    Voici ma fonction :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        public HashMap<Double, Double> intersec(HashMap<Double, List<String>> tmpTable1, HashMap<Double, List<String>> tmpTable2, HashMap<String, Double> curve1, HashMap<String, Double> curve2, double nbRep){
            // on calcule le milieu des droites au (prix2-prix1)/2
            double milieu = (curve1.get("xb")-curve1.get("xa"))/2.0 + curve1.get("xa");
            // on calcule la valeur correspondante
            HashMap<Double, Double> res1 = this.calculNbRep(tmpTable1, new HashMap<Double, Double>(), milieu);
            HashMap<Double, Double> res2 = this.calculNbRep(tmpTable2, new HashMap<Double, Double>(), milieu);
     
            // on regarde si le prix ne change plus
            if(Math.abs(curve1.get("xb")-curve1.get("xa")) < 0.01){
                // on est sur l'intersection
                return res1;
            } else {
                if((nbRep-res1.get(milieu)) > res2.get(milieu)){
                    // le point d'intersection est apres
                    curve1.put("xa", milieu);
                    curve1.put("ya", res1.get(milieu));
                    curve2.put("xc", milieu);
                    curve2.put("yc", res2.get(milieu));
                    return intersec(tmpTable1, tmpTable2, curve1, curve2, nbRep);
                } else if((nbRep-res1.get(milieu)) < res2.get(milieu)){
                    // le point est avant
                    curve1.put("xb", milieu);
                    curve1.put("yb", res1.get(milieu));
                    curve2.put("xd", milieu);
                    curve2.put("yd", res2.get(milieu));
                    return intersec(tmpTable1, tmpTable2, curve1, curve2, nbRep);
                }
            }
            return null;
        }
    Merci.

  2. #2
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    C'est normal qu'il te dise qu'il manque un return.

    Imagine que tous tes if renvois false

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if (----)
      return;
    else if (----)
      return
    else if(---)
      return;
    Dans ce cas la fonction ne renvoi rien du tout, or pour le compilo, une fonction doit renvoyer quelque chose dans tous les cas (même si toi tu sais que ce cas n'arrivera jamais).

    Sinon il te faut rajouter un else à la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    if (----)
      return;
    else if (----)
      return
    else if(---)
      return;
    else
      return
    Dans ce cas c'est correct.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut
    Ben vi , c'est ça !!! j'étais dans mon truc, et je n'avais pas vu...
    D'ailleurs mon 2eme if ne sert à rien, vu que si ce n'est pas < ce sera forcément l'autre cas... (> ou =)
    Merci !

Discussions similaires

  1. Cours : algorithmes et récursivité
    Par Community Management dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/10/2018, 00h38
  2. [pl/pgSQL 7.2] Returns Opaque?
    Par Gruik dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/10/2003, 16h50
  3. return ();exit() ;
    Par Zazeglu dans le forum C
    Réponses: 12
    Dernier message: 10/10/2003, 20h56
  4. [C#] Changer le focus avec la touche return
    Par sblanc74 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/10/2003, 18h38
  5. return
    Par drKzs dans le forum C
    Réponses: 3
    Dernier message: 18/09/2003, 22h36

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