2013-03-08 4 views
0

Je suis un débutant en Java et je fais quelques questions de pratique pour rafraîchir mes compétences java.if-else-else si

Ecrivez une méthode nommée season qui prend deux entiers comme paramètres représentant un mois et un jour et qui renvoie une chaîne indiquant la saison pour ce mois et ce jour. Supposons que les mois sont spécifiés sous la forme d'un nombre entier compris entre 1 et 12 (1 pour janvier, 2 pour février, etc.) et que le jour du mois est un nombre entre 1 et 31.

Si la date est comprise entre 12 et 12/16 et 3/15, vous devriez retourner "Winter". Si la date tombe entre 3/16 et 6/15, vous devriez retourner "Spring". Si la date est comprise entre le 16/06 et le 15/09, vous devez retourner "Summer". Et si la date tombe entre le 16/09 et le 12/15, vous devriez retourner "Fall". Mais je ne reçois pas la sortie. Mais cela me semble juste. N'importe qui peut me dire où je me suis trompé?

+0

Si 'mois == 4' être' mois> = 4'? –

+0

Dans la seconde si 'month <= 6'est inutile parce que vous testez' month == 4' –

+0

Vos conditions sont erronées. Par exemple: Postuler le mois d'octobre, l'automne, c'est l'hiver. – GeorgeVremescu

Répondre

8

|| has lower precendence than && et vos conditions ne semblent corrects - que vous vouliez sans doute écrire quelque chose comme:

if((month == 9 && day >= 16) //September, on or after the 16th 
     || month == 10   //or October 
     || month == 11   //or November 
     || (month == 12 && day <=15)) { //or December, but before or on the 15th 
    return "Fall"; 
} 

(même commentaire pour les autres conditions)


Vous pouvez le rendre plus court par en utilisant un petit hack, mais la lisibilité n'est peut-être pas aussi bonne (discutable):

int mdd = month * 100 + day; //date in MDD format, for example 507 for May 7th 

if (mdd >= 916 && mdd <= 1215) { 
    return "Fall"; 
} 
+0

Cela ne signifie-t-il pas que seulement 9/15, 9/16, 12/15 et 12/16 étaient l'hiver? – christopher

+0

Une question.Je me rends compte de la partie jour répéter.Alors, y at-il un moyen de le stocker? – user2148463

+0

@ChrisCooney Oui, vous avez raison. – assylias

3

Vous devriez essayer d'écrire quelque chose comme ceci:

if((month>9 && month<12) || (month==9 && day>=16) || (month==12 && day<=15)){ 
    return "Fall"; 
} else if 
    ... 
} 

Les préséances sont importants, aussi, mais vous devez réfléchir à ce que vous voulez vraiment atteindre, et de construire votre expression selon que.

1
if(month>=9 && month<=12 && (day==15||day==16)){ 
    return "Fall"; 
} 

Ce problème est que seuls les 15e et 16e mois sont considérés comme l'hiver.

Solution

Si cela ne tenait qu'à moi, je re-facteur if-else arbre vérifier d'abord pendant des mois, puis vérifiez les jours. Ainsi par exemple:

if(month>=9 && month<=12) 
{ 
    // Some special cases. 
    if((month == 9 && day < 15) || (month == 12 && day > 16)) 
    { 
     // It isn't fall. 
    } 
    else 
    { 
     // It is fall. 
    } 
} 
+0

Damn nuits blanches. Merci, je vais éditer. – christopher

+1

Bienvenue dans le club '2000' :) – gaborsch

0

Cela fonctionne très bien. Vous avez eu quelques erreurs de Minow je corrige

public static String season(int month,int day){ 

    if((month>=9 && month<=12) && (day==15||day==16)) 
     return "Fall";  
    else{ 
     if ((month>=4 && month<=6) && (day==16||day==15)) 
      return "Spring";   
     else{ 
      if ((month>=6 && month<=9) && (day==16||day==15)) 
       return "Summer";  
      else 
       return"Winter"; 
     } 
    } 

}