Algorithme Java

Résolu/Fermé
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 28 sept. 2016 à 20:24
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 29 sept. 2016 à 21:39
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 ? .
A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
28 sept. 2016 à 20:29
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
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
28 sept. 2016 à 21:32
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
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
28 sept. 2016 à 21:36
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
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
28 sept. 2016 à 21:52
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
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
Modifié par KX le 28/09/2016 à 22:26
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
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 28/09/2016 à 22:36
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