Probleme return statement
Résolu
apolonys
-
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
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
-
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 }
-
-
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. -
-
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 -
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 ?
-