Algorithme " Les branchements conditionnels "

Fermé
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 30 sept. 2016 à 04:25
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 3 oct. 2016 à 11:18
Bonjour, Voilà je suis actuellement sur un mini programme que j'essaie d'améliorer au mieux ce dernier consiste a entré une date (jours et mois) et à afficher la saison auxquels la date correspond Exemple : "21 décembre : Hiver " cependant ayant déjà fait le programme , après mûres réflexions j'ai pris conscience que"mes branchements conditionnels " (if , else) étaient beaucoup trop long et qu'une simplification de tout sa s'imposaient du coup ayant simplifier du mieux que je peut mes branchement je m’aperçois que le programme m'affichais une saison erroné selon la date entré, du coup je bloque avec des conditions illisible, incompréhension et interminable ! voilà une idée d'ou j'en suis :
if (jours >= 21 && mois == 12 || mois == 1 || mois == 2 || mois == 3 && jours <= 20){
System.out.println(" Hiver : " + jours + " / " + mois);
}
A voir également:

2 réponses

Utilisateur anonyme
30 sept. 2016 à 07:14
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
Modifié par baladur13 le 30/09/2016 à 17:34
Bonjours Merci pour votre intervention , si c'est de cette façon dont vous parlé je l'ai fait , toute fois j'trouve quand même mon code assez lourds , étant un " amateur" en programmation , je comprends avec les dates , je suppose que c'est une classe connu par la javDoc mais je sais pas l'utiliser , ni savoir tout ce que cette classe propose :/ :

switch (mois) {
         case 1: System.out.println( jours + "/Janvier, C'est l'Hiver " );
            break;
         case 2: System.out.println( jours + "/Fevrier, C'est l'Hiver ");
            break;
         case 3: 
            if (jours < 21) 
               System.out.println( jours + "/Mars, C'est l'Hiver " );
            else 
               System.out.println ( jours + "/Mars, C'est le Printemps " );
            break;
         case 4: System.out.println( jours + "/Avril, C'est le Printemps ");
            break;
         case 5: System.out.println( jours + "/Mai, C'est le Printemps ");
            break;
         case 6: 
            if ( jours < 21)
               System.out.println( jours + "/Juin, C'est le Printemps ");
            else
               System.out.println( jours + "/Juin, C'est l'Eté");
            break;
         case 7: System.out.println( jours + "/Juilet, C'est l'Eté ");
            break;
         case 8: System.out.println( jours + "/Aout, C'est l'Eté ");
            break;
         case 9: 
            if ( jours < 21)
               System.out.println( jours + "/Septembre, C'est l'Eté ");
            else 
               System.out.println( jours + "/Septembre, C'est l'Automne");
            break;
         case 10 : System.out.println( jours + "/Octobre, C'est l'Automne");
            break;
         case 11 : System.out.println( jours + "/Novembre, C'est l'Automne");
            break;
         case 12 : 
            if ( jours < 21)
               System.out.println( jours + "/Decembre, C'est l'Automne");
            else 
               System.out.println( jours + "/Decembre, C'est l'Hiver ");
            break;
               
            default : System.out.println(" Attention Erreur ,  le mois entrer n'existe pas ! "+ mois );
            
            }


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
0
Utilisateur anonyme
30 sept. 2016 à 18:13
EN lisant bien la doc, on voie que l'on peut attribuer plusieurs case à une action.

switch (mois) {
         case 1:
         case 2: 
            System.out.println("C'est l'Hiver ");
            break;
         case 3: 
            //etc
            
            }

0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
30 sept. 2016 à 08:01
Bonjour,

Tu peux également réutiliser ton programme de comparaison de dates pour savoir si ta date est inférieure ou supérieure aux solstices et équinoxes.

Remarque : les dates des solstices et équinoxes varient d'une année sur l'autre. Voir le détail sur Wikipédia.
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
30 sept. 2016 à 17:31
Merci pour votre intervention , j'comprends votre réflexion donc l'idée serait de récupéré la classe "CompareDate" d'entré une date souhaité et selon la date il devra comparé les dates des solstices et équinoxes de façon à déterminé si la date se trouve dans un hiver boréal , ete boréal et le tout se trouvera dans plusieurs branchement conditionnels .... Mais j'ai du mal a le conceptualisé de plus comment Ma date CompareDate pourraient prendre en compte les solstices et les équinoxes
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
30 sept. 2016 à 18:16
Très simplement en fait.

Simplifions en considérant que les solstices et équinoxes sont toujours le même jour d'une année sur l'autre.

Tu fais une comparaison de ta date avec le solstice d'été, si ta date est inférieure tu la compare avec l'équinoxe de printemps, sinon avec l'équinoxe d'automne.

Ces deux tests te permettent de découper l'année en 4 saisons, il faudra juste gérer le cas particulier de l'hiver après l'automne (semaine du 21 au 31 décembre).
0
jiko-java > KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024
30 sept. 2016 à 21:07
Je comprends l'idée de segmenté l'année en 4 partie et de se préoccupé que des cas ou les solstices et les équinoxe sont impliqué a savoir de Mars à juin , de juin à septembre , de septembre a décembre et de décembre à Mars , mais ce que j'ai du mal a comprendre C'est l'a manière de matérialisé mes branchements Puisque si on considère par exemple l'été on suppose qu'il y'a au total 94 jours , mais c'est jours là j'dois les convertir en mois auxquels ils appartiennent Fin voilà ce que j'ai du mal a comprendre c'est comment puis-je comparé par exemple cette date 25 / 8 et déterminé qu'il fait partit de la saison d'été et sachant que la saison d'été comporte 94 jours.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
30 sept. 2016 à 22:14
Peu importe le nombre de jours dans la saison. Il n'y a que 4 dates qui sont utiles, ce sont les équinoxes et solstices qui déterminent les moments où changent les saisons.

Puisque tu as déjà une méthode de comparaison des dates il faut t'en servir ce qui simplifie énormément le problème.

Par exemple, l'équinoxe de printemps tombe (en général) le 20 mars, donc si tu compares ta date au 20 mars et qu'elle est plus petite alors tu sais que c'est un jour d'hiver...
0
Oui je vois c'est ce que j'ai essayé de faire dans ma méthode CompareDate() du coup je me retrouve avec sa comme Branchement:
public static int compareDate(int jourDate1, int moisDate1, int anneeDate){
                                          
   if(jourDate1 >= 21 && moisDate1 >= 3 && jourDate1 <=20 && moisDate1 <=6)
   return 2;   
   
   if(jourDate1 >= 21 && moisDate1 >= 6 && jourDate1 <=20 && moisDate1 <=9)
   return 1;
   
   if(jourDate1 >= 21 && moisDate1 <= 9 && jourDate1 <=20 && moisDate1 <=12)
   return 0;
   
   
   return -1;                    
                          
 }
mais étant donné que ma méthode dois me return un entier j'étais forcé de retourné dans ma méthode main afin qu'il fasse correspondre les return et qu'il affiche la saison mais le problème c'est qu'a chaque fois que j'entre une date il m'affiche hiver :/ :

public static void main(String[] args) {
  
  System.out.println("Tests de la methode compareDate");
  System.out.println("Entrez la date1 sous le format JJ/MM/AA");
  int [] date1 = lireJJMMAA();
  
  int comparaison = compareDate(date1[0], date1[1], date1[2]);
 
  
  if (comparaison == 2)
   System.out.println("Printemps");
  
  if (comparaison == 1)
   System.out.println("Ete");
       
      if (comparaison == 0) 
      System.out.println("Automne");
      
      else
         System.out.println("Hiver");
0