2014-05-01 3 views
0

Dé fi nissez une méthode Java qui prend trois valeurs entières (un mois, un jour et un an) comme arguments et renvoie le numéro de ce jour dans l'année (un entier compris entre 1 et 365, ou 366 pour les années bissextiles). Votre méthode doit avoir l'en-tête suivant: public static int dayNum (int mois, jour int, int année) Pour calculer le nombre de jours pour une date donnée, utilisez la formule suivante:Calcul de la date Attribution Java

a. jourNum = 31 * (mois - 1) + jour

b. Si le mois est après février (2), alors soustrayez (4 * mois + 23)/10 du jourNUM.

c. Si l'année est une année bissextile et que la date est postérieure au 29 février, ajoutez 1 à dayNum.

Par exemple, considérons le 2 mars 2000. dayNum est 31 * (3 - 1) + 2, ou 64. Mars vient après Février, donc nous soustrayons (4 * 3 - 23)/10, ou 35/10, ou 3 (n'oubliez pas d'utiliser la division entière, tronque le reste). Cela nous donne un nombre de jour de 61. Cependant, 2000 était une année bissextile, et Mars 2 suit Février 29, de sorte que nous ajoutons 1 à jourNum. Notre réponse finale nous dit que le 2 mars 2000, était le 62e jour de l'année.

Je continue d'obtenir des résultats inexacts lorsque je teste cette méthode. Si j'entre dans le 2 mars 2000 il me dit que c'est le 64ème jour et si je rentre le 29 février il me dit que c'est le 57ème jour. Toutes les modifications à mon code qui fonctionnent avec les spécifications de la cession et l'explication de ce que j'ai fait mal seraient très appréciées.

public static int dayNum (int month, int day, int year) 
{ 
    int dayNum; 
    dayNum = 31 * (month - 1) + day; 

    if(month==2) 
    { 
     dayNum = dayNum - (4 * month + 23)/10; 

     if(((year % 4==0 || year % 400 == 0 && (year % 100 != 0)))&&(month>2)) 
     { 
      dayNum= dayNum + 1; 

     } 


    } 
    return dayNum; 
+0

* "Mars vient après Février" *, mais votre 'déclaration if' vérifie uniquement pour février? – MadProgrammer

+0

Je ne suis pas sûr si cela aide, mais les parties b a (4 * 3 + 23) et après c vous avez (4 * 3-23) – michaelp

+0

Ce n'est pas la raison de l'échec - mais votre expression bissextile est faux. –

Répondre

1

"vient après Mars Février", mais votre déclaration if vérifie uniquement février?

if(month==2) 

Vous devez vérifier tous les mois qui tombent après février

if(month >= 3) 

ou

if(month > 2) 
+2

Non. "Le mois est après février". Devrait être 'si (mois> 2)' –

+0

@davidwallace yep, mal lu – MadProgrammer