Algorithme Java

Résolu
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. Modérateur
    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.
    1. 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.
    2. 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é.
    3. Modérateur
      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
    4. 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;         
      }
    5. Modérateur
      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
      ...