Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Exercise_06_34 Answer! #5

Closed
Closed
@SquirrelCoder

Description

@SquirrelCoder

Hey man,

I could not find your answer to Programming Exercise Chapter. 6 Number 34. so I thought I could share my answer :).
PS: Don't know it's efficient, or even a good implementation, but it works pretty good, for any given year.
PS2: I could not find the answer to question No. 33 too, and unfortunately I couldn't solve it yet, though I am working hard on it. When I have written the answer, I will share the code. :)

import java.util.Scanner;/** * Created by SquirrelCoder on 29-Jan-17. */public class ZellerAlgorithm {    public static void main(String[] args) {        Scanner input = new Scanner(System.in);        // getting user input        System.out.print("Enter full year (e.g., 2012): ");        int year = input.nextInt();        System.out.print("Enter month as number between 1 and 12: ");        int month = input.nextInt();        // check user input        if (!checkMonth(month)) {            System.exit(0);        }        // print the calendar header        printCalendarHeader(month, year);        // print the calendar first day        printFirstDay(month, year);        // print the calendar itself        printCalendarItself(month, year);    }    public static int weekDay(int day, int month, int year) {        if (month == 1 || month == 2) {            month = month + 12;            year--;        }        int q, m, k, j, h;        q = day;        m = month;        k = year % 100;        j = (int) (year / 100.0);        h = (q + (int) ((13 * (m + 1)) / 5.0) + k + (int) (k / 4.0) + (int) (j / 4.0) + (5 * j)) % 7;        return h;    }    public static boolean isLeapYear(int year) {        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);    }    public static void printCalendarHeader(int month, int year) {        switch (month) {            case 1:                System.out.print("\t\tJanuary\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 2:                System.out.print("\t\tFebruary\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 3:                System.out.print("\t\tMarch\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 4:                System.out.print("\t\tApril\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 5:                System.out.print("\t\tMay\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 6:                System.out.print("\t\tJune\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 7:                System.out.print("\t\tJuly\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 8:                System.out.print("\t\tAugust\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 9:                System.out.print("\t\tSeptember\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 10:                System.out.print("\t\tOctober\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 11:                System.out.print("\t\tNovember\t");                System.out.println(year);                System.out.println("---------------------------");                break;            case 12:                System.out.print("\t\tDecember\t");                System.out.println(year);                System.out.println("---------------------------");                break;        }        System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat");    }    public static int lastDayOfMonth(int month, int year) {        int lastDayOfMonth;        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {            lastDayOfMonth = 31;        } else if (month == 2) {            if (isLeapYear(year)) {                lastDayOfMonth = 29;            } else {                lastDayOfMonth = 28;            }        } else {            lastDayOfMonth = 30;        }        return lastDayOfMonth;    }    public static boolean checkMonth(int month) {        if (month > 12 || month < 0) {            System.out.println("Invalid Month!");            return false;        }        return true;    }    public static void printFirstDay(int month, int year) {        int firstDay = weekDay(1, month, year);        switch (firstDay) {            case 0:                System.out.print("\t\t\t\t\t\t1");                break;            case 1:                System.out.print("1");                break;            case 2:                System.out.print("\t1");                break;            case 3:                System.out.print("\t\t1");                break;            case 4:                System.out.print("\t\t\t1");                break;            case 5:                System.out.print("\t\t\t\t1");                break;            case 6:                System.out.print("\t\t\t\t\t1");                break;        }        System.out.print("\t");    }    public static void printCalendarItself(int month, int year) {        // find out the last day of that month        // whether it's 28/29/30/31 days        int lastDayOfMonth = lastDayOfMonth(month, year);        // print the calendar itself        for (int i = 2; i <= lastDayOfMonth; i++) {            int printedDay = weekDay(i, month, year);            if (printedDay == 1) {                System.out.println();            }            System.out.print(i + "\t");        }    }}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp