Algorithme Java

[Résolu/Fermé]
Signaler
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
-
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017
-
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

Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
2 901
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.
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017

Ahh d'accord merci , mais bizarrement quand j'essaie d'affecter au variable a et b les jours ,mois et années il m'affiche des erreurs et pour l’exemple je l'entend bien que si annee1 < annee2 on return -1 , pardonnez mon insolence mais cette condition n'est pas complètes selon moi puisque si on suit ce branchement on ne couvre pas le cas suivant : date1 : 20/4/2000 , date 2 : 20/5/2000 du coup une fois que la condition sera vérifié il renverra false et return 1 puisque les mois et les jours n'ont pas été pris en compte.
Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
2 901
j'essaie d'affecter au variable a et b les jours ,mois et années
C'est soit les jours, soit les mois, soit les années, mais pas les trois en même temps.
a et b c'était juste pour conceptualiser la forme de la condition, mais ces variables ne servent à rien, mets directement jour, mois ou année à la place comme dans mon exemple.

ce branchement on ne couvre pas le cas suivant : date1 : 20/4/2000 , date 2 : 20/5/2000
En effet il ne couvre que le cas où la première année est plus petite que la deuxième (soit presque la moitié des cas) il reste encore à gérer les autres cas exactement sur le même format
if (a op b) return r;
.
C'est là où en comptant j'arrive à 7 cas possibles donc 7 return.
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017

Donc j'en déduis que si il y'a 7 return; C'est qu'il a y'a pratiquement autant de branchement conditionnel mais du coup sa revient a faire sa if(anneeDate1 <= anneeDate2 && moisDate1 <= moisDate2 && jourDate1 <= jourDate2) c'est juste que la conditions de base est segmenté en plusieurs "Sous conditions" de manière a mieux s'y retrouvé
Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
2 901
Bien sûr qu'il y a des équivalences logiques, car on peut faire des centaines de combinaisons différentes pour arriver au même résultat mais plus la solution est simple meilleure elle est.
En l'occurrence dans ma solution il n'y a pas de sous conditions, on procède juste par élimination : année1 < année2 je renvoie -1 et je traite les cas restant en sachant qutils respecteront année1 >= année2 (sinon ils auraient renvoyé -1 avec le cas précédent), finalement par élimination tu cherches à trouver des critères qui montrent si tu es au dessus ou en dessous jusqu'à arriver au cas par défaut où tu renvoie 0 considérant que c'est égal.
Messages postés
186
Date d'inscription
dimanche 25 septembre 2016
Statut
Membre
Dernière intervention
22 juillet 2017

Ahh d'accord je vois ,Merci en tout cas !