Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Hello, can you help me troubleshoot this program? I am super lost and haven\'t b

ID: 3889533 • Letter: H

Question

Hello, can you help me troubleshoot this program? I am super lost and haven't been able to finish this problem successfully. I know there is an error by invoking dayNumb.

package javaCalendar.java;

import java.util.Scanner;

public class javaCalendar {

public static void main ( String args []) {

Scanner input = new Scanner(System.in);

//print the year

System.out.println("Input the Year (Ex: 2017): ");

int y = input.nextInt();

//print the month

System.out.println("Input the Month (1-12): ");

int m = input.nextInt();

//ask method to display calendar for month of year

printMonth(y, m);

}

//method to display Header for Month

public static void printMonthHeader (int y, int m) {

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

System.out.println("_____________________________");

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

}

//method to display calendar for a month in a particular year

static void printMonth (int y, int m) {

printMonthHeader(y, m);

printMonthBody (y,m);

}

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

break;

}

return monthName;

}

static void printMonthBody(int y, int m) {

int startDay = getStartDay(y, m);

int numberOfDaysInMonth = getNumberOfDaysInMonth(y,m);

int i = 0;

for (i = 0; i <startDay; i++)

System.out.print("");

for (i = 1; i <= numberOfDaysInMonth; i++) {

if (i<10)

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

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

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

System.out.println();

}

System.out.println();

}

public static int getDayOfWeek( int y, int m, int dayNum )

{

// Adjust month number & year to fit Zeller's numbering system

if (m < 3)

{

m = m + 12;

y = y - 1;

}

int d = getNumberOfDaysInMonth (y,m);

int k = y % 100; // Calculate year within century

int j = y / 100; // Calculate century term

int h; // Day number of first day in month 'm'

h = ( d + ( 13 * ( m + 1 ) / 5 ) + k + ( k / 4 ) + ( j / 4 ) +

( 5 * j ) ) % 7;

// Convert Zeller's value to ISO value (1 = Mon, ... , 7 = Sun )

dayNum = ( ( h + 5 ) % 7 ) + 1;   

return dayNum;

}

public static int getNumberOfDaysInMonth (int y, int m)

{

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

return 31;

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

return 30;

if (m == 2) return isLeapYear (y) ?29:28;

return 0;

}

static int getStartDay (int y, int m) {

return getDayOfWeek (y, m, 1);

}

static boolean isLeapYear (int y)

{

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

}

}

Explanation / Answer

//Corrections are bold letters

//JavaCalendar.java
import java.util.Scanner;

public class JavaCalendar {

   public static void main ( String args []) {

       Scanner input = new Scanner(System.in);

       //print the year

       System.out.println("Input the Year (Ex: 2017): ");

       int y = input.nextInt();

       //print the month

       System.out.println("Input the Month (1-12): ");

       int m = input.nextInt();

       //ask method to display calendar for month of year

       printMonth(y, m);

   }

   //method to display Header for Month

   public static void printMonthHeader (int y, int m) {

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

       System.out.println("_____________________________");

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

   }

   //method to display calendar for a month in a particular year

   static void printMonth (int y, int m) {

       printMonthHeader(y, m);

       printMonthBody (y,m);

   }

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

       break;

       }

       return monthName;

   }

   //Corrected printMonthBody to print
   //correct alignment
   static void printMonthBody(int y, int m) {

       int startDay = getStartDay(y, m);
       int numberOfDaysInMonth = getNumberOfDaysInMonth(y,m);
       int i = 0;
       for (i = 0; i <startDay; i++)
           System.out.print("    ");

       for (i = 1; i <= numberOfDaysInMonth; i++)
       {
           System.out.printf("%4d",i);      
           if ((i + startDay) % 7 == 0)
               System.out.println();

       }
       System.out.println();

   }

  
   //Note:Do not user dayNum in the method definition
   //replace dayNum by d
   public static int getDayOfWeek( int y, int m, int d )

   {

       // Adjust month number & year to fit Zeller's numbering system
        if (m < 3)
        {
            m = m + 12;
            y = y - 1;
        }
      
        int k = y % 100;      // Calculate year within century
        int j = y / 100;      // Calculate century term
        int h = 0;            // Day number of first day in month 'm'
      
        h = ( d + ( 13 * ( m + 1 ) / 5 ) + k + ( k / 4 ) + ( j / 4 ) +
            ( 5 * j ) ) % 7;
      
        // Convert Zeller's value to ISO value (1 = Mon, ... , 7 = Sun )
       //declare dayNum as variable
        int dayNum = ( ( h + 5 ) % 7 ) + 1;   
        //return dayNum
        return dayNum;

   }

   public static int getNumberOfDaysInMonth (int y, int m)

   {

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

           return 31;

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

           return 30;

       if (m == 2) return isLeapYear (y) ?29:28;

       return 0;

   }

   static int getStartDay (int y, int m) {

       return getDayOfWeek (y, m, 1);

   }

   static boolean isLeapYear (int y)

   {

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

   }

}

----------------------------------------------------------------------------------------------------

Sample Output:

Compile : javac JavaCalendar.java

Run: java JavaCalendar

Input the Year (Ex: 2017):
2017
Input the Month (1-12):
11
   November 2017
_____________________________
Sun Mon Tue Wed Thu Fri Sat
               1   2   3   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

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Chat Now And Get Quote