Probleme return statement

Résolu
apolonys -  
 apolonys -
Bonjour,
j'ai un soucis avec le return , notion que je comprends pas tout a fait bien. Donc j'ai un prog qui valide une date selon le mois, jour et année mais j'ai une erreur de : missing return statement. j'ai retourné le code dans tous les sens mais rien ...

1 import java.util.Scanner ;

2 public class ValidationDate {

3

4 /**

5 * Calcul année bissextile en fonction de l'année lue.

6 * @param année l'année donnée.

7 * @return année bissextile ou pas (vrai ou faux).

8 */

9 public static boolean annéeBissextile (int année){

10 boolean bissextile = (((année % 400)==0) || ((année % 4) == 0 &&

11 !((année % 100)== 0)));

12 return bissextile;

13 }

14

15 /**

16 * Calcul le nombre de jour du mois en fonction du mois lu

17 * @param mois le mois donné.

18 * @return le nombre de jour du mois donné.

19 */

20 public static int nombreJour (int mois, int année){

21 int nombreJourMois;

22 boolean bissextile = annéeBissextile(année);

23 if ((mois==1) || (mois==3) || (mois==5) || (mois==7) || (mois==8) ||

24 (mois==10) || (mois==12)){

25 nombreJourMois = 31;

26 return nombreJourMois;

27 }else if ((mois==4) || (mois==6) || (mois==9) || (mois==11)){

28 nombreJourMois = 30;

29 return nombreJourMois;

30 }else if (mois==2){

31 if (bissextile){

32 nombreJourMois = 29;

33 return nombreJourMois;

34 }else {

35 nombreJourMois = 28;

36 return nombreJourMois;

37 }

38 }

39 }

40

41 /**

42 * Valider une date en fonction du jour lu, mois et année.

43 * @param jour jour donné.

44 */

45 public static void main ( String[] args){

46 Scanner clavier = new Scanner ( System.in ) ;

47 int jour, mois, année, nombreJour, nombreJourMois;

48 System.out.println("Entrer un jour :");

49 jour = clavier.nextInt();

50 System.out.println("Entrer un mois :");

51 mois = clavier.nextInt();

52 System.out.println("Entrer une année :");

53 année = clavier.nextInt();

54 nombreJourMois = nombreJour(mois,année);

55 if (jour <= nombreJourMois){

56 System.out.println("Jour valide");

57 } else {

58 System.out.println("Jour invalide");

59 }

60 }

61 }




merci d'avance


1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Dans ta méthode nombreJour tu fais une succession de if sur la valeur de mois, mais il faut que l'énumération des cas soit exhaustif.
Par exemple si mois==13, il n'y a pas de return associé, alors qu'il faudrait en avoir un.
Tu peux par exemple associé la valeur 0 pour dire qu'il n'y a pas de jour au mois 13.

Remarque au passage, tu peux directement faire return 0; sans avoir à déclarer une variable nombreJourMois=0 et faire return nombreJourMois.

38		}
		else return 0;
39	}
1
apolonys
 
Ah super, javais pas pensé a ca un grand merci!! j'y ai passé des heure a trouvé ce qui n'allait pas :/ en plus je capte pas trop les return

donc si je veux etre plus complet je pourrai faire :

} else {
if (( 1 <= mois) && (mois <=12)) {
nombreJourMois = 0;
return nombreJourMois;
}
}
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Non, parce que si mois==13 tu rentres bien dans le else, mais tu ne donneras aucune valeur à nombreJourMois car tu ne rentreras pas dans le if. Du coup tu vas faire un return de nombreJourMois alors que tu ne l'as jamais initialisé !
En fait cette condition ne sert à rien, car tous les mois entre 1 et 12 sont déjà traités avant.
Ici ce qui t'intéresse c'est vraiment les autres cas, donc un else suffit, comme je l'ai fait plus haut.
0
apolonys
 
j'associe bien une valeur a nombreJourMois qui est 0 non ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
pas avec ce code là non.

    // une succession de if et else if traitant les cas de 1 à 12
    } // ligne 38
    else // mois<1 ou mois>12
    {
        if (( 1 <= mois) && (mois <=12)) // condition impossible
        {
            nombreJourMois = 0;    // ce code ne sera jamais traité
            return nombreJourMois; // à cause de la condition impossible
        }
        // ici il manque un else dans le cas ou mois<1 ou mois>12    
    }
} // ligne 39

Toutes ces instructions ne servent à rien, ça ne résout pas ton problème.
Ce qu'il faut je l'ai déjà mis plus haut dans ma première réponse :

    // une succession de if et else if traitant les cas de 1 à 12
    } // ligne 38
    else // mois<1 ou mois>12
        return 0;
} // ligne 39
0
apolonys
 
ah ok je crois que j'ai compris donc en fait le else est deja un cas que j'ai résolu plus haut dans le code si je veux que la condition soit possible ca serait plutot :

if ((mois <1) || (mois >12))
nombreJourMois = 0;
return nombreJourMois;

mais avec ta solution ca reviendra au meme mais en plus courte c'est bien ca ?
0