Algorithme Java

Résolu
Jiko-java Messages postés 189 Statut Membre -  
Jiko-java Messages postés 189 Statut Membre -
Bonjour,
Voilà j'suis sur un algorithme qui consiste a comparé 2 date et a dire la quelle des 2 est antérieur et l'autre postérieur , les date sont en jours/ mois/ année du coup il y'a 3 paramètre a prendre en compte puis-je conclure donc que
(le nombre de paramètre a prendre en compte )^ 2 = au nombre de cas a couvrir autrement dis les cas a traités ? .

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    En s'y prenant bien il n'y a qu'un seul cas à prendre en compte, grâce à l'ordre lexicographique des String.

    Le String "2016-09-28" est plus grand que "2001-01-01" donc les dates qu'ils représentent sont également dans cet ordre.
    0
    1. Jiko-java Messages postés 189 Statut Membre
       
      Je n'ai pas très bien compris votre raisonnement :/ , Supposons que nous devons comparé les 2 dates suivantes : date1: 30/05/2015 et date2: 30/04/2015 et Afficher qu'elle est la la date antérieur et la date postérieur , Si on prend pas en compte les 3 paramètre a savoir l'annee le mois et le jours , les chance pour déterminés quelle date est la plus ancienne et quelle date est la plus récente son quasi nul non ? Puisque a chaque fois il faut couvrir les cas où
      (anneeDate1 < anneeDate2 && moisDate1 <= moisDate2 && jourDate1 <= jourDate2 || anneeDate1 <= anneeDate2 && moisDate1 < moisDate2 && jourDate1 <= jourDate1 ||
      anneeDate1 <= anneeDate2 && moisDate1 <= moisDate2 && jourDate1 < jourDate2) . C'est de cette manière que j'ai conclu que (le nombre de paramètre a prendre en compte )^ 2 = au nombre de cas a couvrir . Mais C'est quand même un travail assez Fastidieux du coup je me demandais si il n'y avait pas un algorithme plus lisible et plus accessible.
      0
    2. Jiko-java Messages postés 189 Statut Membre
       
      J'ai également oublié de mentionner le fait que les dates ne sont pas donné à l'avance , C'est donc l'utilisateurs qui entre les dates qu'il souhaite comparé.
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Oublions ma réponse de tout à l'heure alors et restons sur ton code.

      En logique booléenne il y a des simplifications qui peuvent être faites, et il est hors de question de faire autant de && et de || que tu n'en as fait.

      En vérité il n'y a que 7 cas à considérer et je t'invites à la coder dans une méthode dédiée qui pourrait être :

      int compareDate(int day1, int month1, int year1, int day2, int month2, int year2)
      Qui donne comme résultat -1 si date1<date2, 0 si date1=date2 et 1 si date1>date2
      0
    4. Jiko-java Messages postés 189 Statut Membre
       
      Merci ! justement j'en étais conscient que mon branchement conditionnel était beaucoup trop long mais c'était la seule méthode qui m'étais venus en tete , n'ayant pas encore toute les facultés nécessaires pour Simplifier Ces logiques Booléennes , j'ai du faire avec les moyens du bord. En ce qui concerne la méthode c'est tout à fait sa que j'ai fait mais ma méthode ne Simplifie en rien mon branchement conditionnel. C'est pour cette raison que je me demandais de quelle façon pourrais-je simplifier d'avantage Ces conditions , de façon à améliorer les performances de mon code.

      public static int compareDate(int jourDate1, int moisDate1, int anneeDate1,
                int jourDate2, int moisDate2, int anneeDate2) {
                                
            
       if(jourDate1 == jourDate2 && moisDate1 == moisDate2 && anneeDate1 == anneeDate2)
          return 0;
            
        if(anneeDate1 < anneeDate2 && moisDate1 <= moisDate2 && jourDate1 <= jourDate2 || anneeDate1 <= anneeDate2 && moisDate1 < moisDate2 && jourDate1 <= jourDate1 || 
      anneeDate1 <= anneeDate2 && moisDate1 <= moisDate2 && jourDate1 < jourDate2)
          return -1;
            
            
          return 1;         
      }
      0
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      Exemple de simplification : si
      anneeDate1 < anneeDate2
      , ça ne sert à rien de savoir que
      moisDate1 <= moisDate2 && jourDate1 <= jourDate2
      ,
      moisDate1 < moisDate2 && jourDate1 <= jourDate1
      ou
      moisDate1 <= moisDate2 && jourDate1 < jourDate2
      ...
      Dans tout les cas, si
      anneeDate1 < anneeDate2
      alors ton résultat est
      -1
      ...
      0