0

私は Java の初心者で、Java のスキルを磨くために練習問題をいくつかやっています。

月と日を表す 2 つの整数をパラメーターとして取り、その月と日の季節を示す文字列を返す、season という名前のメソッドを作成します。月は 1 ~ 12 の整数 (1 月は 1、2 月は 2 など) として指定され、月の日は 1 ~ 31 の数値であるとします。

日付が 12/16 から 3/15 の間にある場合は、「冬」を返す必要があります。日付が 3/16 ~ 6/15 の場合は、"Spring" を返す必要があります。日付が 6/16 から 9/15 の間にある場合は、"Summer" を返す必要があります。また、日付が 9/16 から 12/15 の間にある場合は、"Fall" を返す必要があります。

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";

         
      }

  
}

しかし、私は出力を得ていません.しかし、それは私には正しいようです.誰でも私がどこで間違ったのか教えてもらえますか?

4

4 に答える 4

8

||よりも優先度が低く&&、条件が正しくないように見えます-おそらく次のように書きたいと思いました:

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";
}

(他の条件についても同じコメント)


ちょっとしたハックを使用して短くすることもできますが、読みやすさはおそらくそれほど良くありません(議論の余地があります):

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

if (mdd >= 916 && mdd <= 1215) {
    return "Fall";
}
于 2013-03-08T12:56:14.300 に答える
3

次のようなものを書くようにしてください。

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

優先順位も大事ですが、本当にやりたいことを考えて、それに従って表現を組み立てていく必要があります。

于 2013-03-08T13:01:38.767 に答える
1
if(month>=9 && month<=12 && (day==15||day==16)){
    return "Fall";
}

これに伴うこの問題は、9 月から 12 月の 15 日と 16 日だけが冬と見なされることです。

解決

私なら、if-else ツリーをリファクタリングして、最初に月をチェックし、次に日をチェックします。たとえば、次のようになります。

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.
    }
}
于 2013-03-08T13:03:27.480 に答える