Seasons by month and day Write a program reads two integers representing a month and day and prints the season for that month and day. Assume that months are specified as an integer between 1 and 12 (1 for January, 2 for February, and so on) and that the day of the month is a number between 1 and 31. 
If the date falls between 12/16 and 3/15, you should print "Winter". If the date falls between 3/16 and 6/15, you should print "Spring". If the date falls between 6/16 and 9/15, you should print "Summer". And if the date falls between 9/16 and 12/15, you should print "Fall".

public static void main(String[] args)
{
    Scanner scan = new Scanner(System.in);

    int month = scan.nextInt();
    int day = scan.nextInt();

    if((month == 12 &amp;&amp; day &gt;= 16 &amp;&amp; day &lt;= 31) || (month == 1 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;= 31) || (month == 2 &amp;&amp; day &gt;= 1 &amp;&amp; day &lt;= 28) || (month == 3 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;=15))
    {
        System.out.println("Winter");
    }
    else if((month == 3 &amp;&amp; day &gt;= 16 &amp;&amp; day &lt;= 31) || (month == 4 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;= 30) || (month == 5 &amp;&amp; day &gt;= 1 &amp;&amp; day &lt;= 31) || (month == 6 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;=15))
    {
        System.out.println("Spring");
    }
    else if((month == 6 &amp;&amp; day &gt;= 16 &amp;&amp; day &lt;= 30) || (month == 7 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;= 31) || (month == 8 &amp;&amp; day &gt;= 1 &amp;&amp; day &lt;= 31) || (month == 9 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;=15))
    {
        System.out.println("Summer");
    }
    else if((month == 9 &amp;&amp; day &gt;= 16 &amp;&amp; day &lt;= 30) || (month == 10 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;= 31) || (month == 11 &amp;&amp; day &gt;= 1 &amp;&amp; day &lt;= 30) || (month == 12 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;=15))
    {
        System.out.println("Fall");
    }
}


}
Readability

Your conditional checks are very very long. They run off the screen. At the very least, add some new lines:

else if ((month == 9 &amp;&amp; day &gt;= 16 &amp;&amp; day &lt;= 30) || 
         (month == 10 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;= 31) || 
         (month == 11 &amp;&amp; day &gt;= 1 &amp;&amp; day &lt;= 30) || 
         (month == 12 &amp;&amp; day &gt;=1 &amp;&amp; day &lt;=15))


But this still makes it very hard to actually understand what is going on. There's no really any notion of "range" in this code. You are simply hardcoding each individual month separately. 

Ranges

Representing the range "3/16 to 6/15" is difficult. Representing the range 316 to 615 is easy. If we don't care about checking for invalid dates, we can uniquely represent the year by doing month * 100 + day and looking at it that way.

int month_day = month * 100 + day;
if (month_day &lt;= 315) {
    System.out.println("Winter");
}
else if (month_day &lt;= 615) {
    System.out.println("Spring");
}
else if (month_day &lt;= 915) {
    System.out.println("Summer");
}
else if (month_day &lt;= 1215) {
    System.out.println("Fall");
}
else {
    System.out.println("Winter");
}


By treating the ranges as one-sided, it's easy to organize the code to actually look like we're looking for ranges. Winter simply appears on both ends for simplicity.