Question: I need help understanding why my output gets messed up for April and July. It's obviously something to do with those months starting day 1

I need help understanding why my output gets messed up for April and July. It's obviously something to do with those months starting day 1 on Sunday. All the other months are accurate. This is a Java program.

/**

* This Java program prompts the user to enter a year (e.g., 2018) & then

* displays a calendar for each month in that year

*

*/

import java.util.Scanner;

public class PrintYearCalendar

{

public static void main(String[] args)

{

Scanner input = new Scanner ( System.in);

int y,m;

System.out.println( "Please enter the year as a 4-digit "

+ "number (e.g., 2018): ");

y = input.nextInt();

for (m = 1; m

{

printMonthCalendar(m,y);

}

input.close();

}

public static void printMonthCalendar (int m, int y)

{

int dayNum = getStartDay (m,y);

int numDaysInMonth = getNumDaysInMonth (m,y);

printMonthHeader (m,y);

printMonthBody (dayNum, numDaysInMonth);

}

public static int getStartDay(int m, int y)

{

final int day = 1; //Must be set to day 1 for this to work

if (m

{

m = m + 12;

y = y - 1;

}

int yearInCent = y % 100;

int century = y / 100;

int firstDay = 0;

firstDay = (day + (13 * (m + 1) / 5) + yearInCent

+ (yearInCent / 4) + (century / 4) + (5 * century)) % 7;

int dayNum = ((firstDay + 5) % 7) + 1;

return dayNum;

}

public static int getNumDaysInMonth(int m, int y)

{

if ((m == 1) || (m == 3) || (m == 5) || (m == 7) || (m == 8) ||

(m == 10) || (m == 12))

{

return 31;

}

else if ((m == 4) || (m == 6) || (m ==9) || (m == 11))

{

return 30;

}

else if (m == 2)

{

if (isLeapYear(y))

{

return 29;

}

else

{

return 28;

}

}

else

{

return 0;

}

}

public static boolean isLeapYear(int y)

{

if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))

{

return true;

}

else

{

return false;

}

}

public static void printMonthHeader(int m, int y)

{

System.out.println(" " + getMonthName(m) + " " + y);

System.out.println( "----------------------------");

System.out.println(" Sun Mon Tue Wed Thu Fri Sat");

}

public static String getMonthName(int m)

{

String monthName = null;

switch (m)

{

case 1: monthName = "January"; break;

case 2: monthName = "February"; break;

case 3: monthName = "March"; break;

case 4: monthName = "April"; break;

case 5: monthName = "May"; break;

case 6: monthName = "June"; break;

case 7: monthName = "July"; break;

case 8: monthName = "August"; break;

case 9: monthName = "September"; break;

case 10: monthName = "October"; break;

case 11: monthName = "November"; break;

case 12: monthName = "December";

}

return monthName;

}

public static void printMonthBody(int dayNum, int numDaysInMonth)

{

int i = 0;

for (i = 0; i

{

System.out.print(" ");

}

for (i = 1; i

{

if (i

System.out.print(" " + i);

else

System.out.print(" " + i);

if ((i + dayNum) % 7 == 0)

System.out.println();

}

System.out.println();

System.out.println();

}

}

I need help understanding why my output gets messed up for April

April 2018 Sun Mon Tue Wed Thu Fri Sat 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 May 2018 Sun Mon Tue Wed Thu Fri Sat 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 June 2018 Sun Mon Tue Wed Thu Fri Sat 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2728 29 30 July 2018 Sun Mon Tue Wed Thu Fri Sat 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ???? 21

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!