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 :

erreur de retour sur une boucle for


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Points : 29
    Points
    29
    Par défaut erreur de retour sur une boucle for
    j ai eu plusieurs fois cette erreur ,<This method must return a result of type Eleve> mais maintenant j 'aimerai comprendre ou est le problème
    voici le code qui induit une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Eleve Chercher(String nom) {
    		for (Eleve eleve : listeEleves) {
    			if (eleve.getNom().equals(nom)) {
    				return eleve;
    			} else {
    				return null;
    			}
    		}
    	}
    ce que je fait pour que celui -ci compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Eleve Chercher(String nom) {
    		for (Eleve eleve : listeEleves) {
    			if (eleve.getNom().equals(nom)) {
    				return eleve;
    			} else {
    			}
    		}
    		return null;
    	}
    ou la solution trouver sur le web
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Eleve Chercher(String nom) {
    		for (Eleve eleve : listeEleves) 
    			if (eleve.getNom().equals(nom)) return eleve;
    		return null;
     
     
    	}
    voila je ne comprend pas pourquoi avec la première condition ,< return eleve> est à l intérieur de la boucle for et tout fonctionne et pour le else je suis obligé de sortir < return null >à l extérieur de la boucle for pour annuler le problème ?
    merci pour vos réponses

  2. #2
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Dans le premier, code le if/else se trouve dans la boucle, et, donc est exécuté pour chaque itération. Mais lorsque la boucle est terminée, il n'y rien qui est fait. Or, il est indispensable d'avoir un code qui retourne une valeur pour la méthode, puisqu'elle un code de retour.

    On pourrait penser que comme il s'agit d'un if/else, alors il y a forcément un return, celui du if ou celui du else. Sauf que premièrement un compilateur ne cherche pas exécuter le code pour savoir s'il fonctionne. Il peut chercher à faire certaines déductions de base mais c'est très limité.

    En l’occurrence, listeEleves pouvant être vide, le if/else pourrait ne pas être exécuté. Et donc il est logique d'avoir cette erreur. Mais on peut voir que le compilateur limite son estimation sur l'exécution avec le code suivant qui ne compile pas non plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Eleve demo1(String nom) { 
    		for (int i=0; i<10; i++) { 
    				return null; 
    		} 
    }
    Pourtant il est évident que le return null s'exécute forcément au moins une fois... mais ça le compilateur ne cherche pas à le savoir. Et le code suivant ne compile pas non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Eleve demo2(String nom) { 
    		if ( true ) {
    				return null; 
    		} 
    }


    Par ailleurs, le premier code, corrigé en ajoutant return null[ après la boucle, ne fait pas la même chose que les deux autres. Le premier retourne l’élève dont le nom correspond au paramètre s'il se trouve en première position dans l'itération. Les autres retournent l’élève dont le nom correspond. Ou null dans tous les cas s'il n'y aucun élève de nom recherché.
    Le else est exécuté à chaque itération, donc à la première, si le nom de l'élève testé ne correspond pas, et bien ça retourne null et la boucle s'arrête donc.
    La logique de placer le else dans le for ou hors du for n'est pas la même.

    Quant aux deux solutions que tu montres, elles sont identiques du point de vue exécution, et il est probable que compilées, le bytecode soit le même, parce que ça le compilateur sait faire ce genre de choses : déterminer que le else étant vide, il peut être ignoré, et que le bloc du if ne contenant qu'une instruction, il est identique au cas du dernier code que tu as trouvé sur le web. D'ailleurs, personnellement, je préfère mettre un bloc, même s'il n'y a qu'une instruction : la présentation est plus claire, et ajouter du code, ou en enlever, au if ne présente aucun risque de tout faire foirer, alors que ça ne coûte pas grand chose d'avoir deux accolades en plus, même si elles sont inutiles du point de vue de l'exécution.
    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.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2019
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    merci joêl pour ta réponse explicite c'est plus clair maintenant . Pour ce qui est des accolades je les met toujours ,j 'ai pris l habitude et je trouve aussi que c'est plus clair

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

Discussions similaires

  1. [Python 3.X] Erreur « invalid syntax » sur une boucle
    Par Badarm dans le forum Général Python
    Réponses: 4
    Dernier message: 16/05/2016, 10h18
  2. Problème sur une boucle For Each
    Par nanoo79 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/11/2014, 09h14
  3. Aide sur une boucle for
    Par Kemanke dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 11/12/2008, 14h13
  4. [MySQL] problème sur une boucle for
    Par leclone dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 28/12/2006, 10h33
  5. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47

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