Help with a Code Online Calendar

1

Well, it is supposed that my code should print in some months 31 days according to one of my conditions but it does not in fact print one day less in every month.

If someone can help me and check my code would be very helpful, I know there are things that could be simplified but I'm just learning.

Thanks in advance

import java.util.Scanner;
public class CalFinal{ 
    public static void main (String[] args){
        Scanner sc = new Scanner(System.in);

        System.out.print("Insert Year:");
        int year =sc.nextInt();

        if (year <= 0){

            System.out.println( year + " Is an invalid Year");
        }



        for (int mo = 1 ; mo <= 12 ; mo++){
            int days = daysOfMonth(year, mo);
            int countDays = 0;
            if (mo == 1 ){
                System.out.println("       January");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }


                }

                System.out.println() ;

            }else if (mo == 2 ){
                System.out.println("       February");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }
                System.out.println() ;

            }else if (mo == 3 ){
                System.out.println("         March");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 4 ){
                System.out.println("         April");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 5 ){
                System.out.println("         May");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 6 ){
                System.out.println("          June");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 7 ){
                System.out.println("          July");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 8 ){
                System.out.println("         August");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 9 ){
                System.out.println("         September");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 10 ){
                System.out.println("          October");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else if (mo == 11){
                System.out.println("         November");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }else{
                System.out.println("          December");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");
                for (int dy = 1; dy < days; dy++){
                    System.out.print(""+dy +  "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }
                }

                System.out.println() ;

            }
        }
    }

    public static boolean isLeapYear(int year){

        if ((year % 4 == 0) && (year % 100 != 0 ) || (year % 400 == 0)){
            return true;

        }else{
            return false;
        }

    }

    public static int daysOfMonth (int year, int month){
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            return 31;
        }else if(month  == 2){
            if(isLeapYear(year)){
                return 29;
            }else{
                return 28;
            }
        }else{
            return 30;
        }

    }

}
    
asked by Edgardo Quintero 08.11.2016 в 00:30
source

2 answers

3

Due to the condition of cycle for ( dy < days ), you only print 30 for months with 31 and 29 for months with 30, etc. It should be dy <= days .

You need to change in each of the cycles for of:

for (int dy = 1; dy < days; dy++){

a:

for (int dy = 1; dy <= days; dy++){
    
answered by 08.11.2016 / 00:43
source
0

Well here is the code with Zeller's formula in the end the thing is that you're putting the date on the correct day

import java.util.Scanner;
public class CalFinal{ 
    public static void main (String[] args){
        Scanner sc = new Scanner(System.in);

        System.out.print("Insert Year:");
        int year =sc.nextInt();

        if (year <= 0){

            System.out.println( year + " Is an invalid Year");
        }



        for (int mo = 1 ; mo <= 12 ; mo++){
            int days = daysOfMonth(year, mo);
            int rD = rightDay(year, mo);
            int countDays = 0;


            if (mo == 1 ){
                System.out.println("       January");
                System.out.println("Su\tMo\tTu\tWe\tTh\tFr\tSa");

                for (int d = 0; d < rD ; d++){

                System.out.print("\t");
                }   


                for (int dy = 1; dy <= days; dy++){
                    System.out.print(dy + "\t") ;
                    countDays ++;
                    if (countDays == 7){
                        System.out.println() ;
                        countDays = 0;
                    }


                }

                //System.out.println() ;

        }


private static int rightDay(int year, int month){
        int a = (14 - month) / 12;
        int y = year - a ;
        int m = month + 12 * a - 2;
        int day = 1, d;

        d = (day + y + y / 4 - y/ 100 + y / 400 + (31 * m ) / 12) %7;

        return(d);


    }
    
answered by 08.11.2016 в 11:56