日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单日历的代码实现

發(fā)布時(shí)間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单日历的代码实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡單日歷的實(shí)現(xiàn)思路

目錄:

  • 功能的描述與介紹。
  • 分步對代碼進(jìn)行解析
  • 完整代碼以及樣例輸出的呈現(xiàn)
  • 1.相關(guān)功能描述

    在控制臺上按提示輸入要查詢的年分,
    輸入完成后,按下回車鍵即可在控制臺顯示出本年的日歷表。

    2.分部對代碼進(jìn)行分析

  • 首先:總體思路 獲取輸入年分—>判斷并計(jì)算出本年每個(gè)月的天數(shù)—>計(jì)算出每個(gè)月第一天在本年的第幾天—>顯示日歷

  • 思路的分步以及代碼介紹

    (1).獲取輸入

  • public void getDate() {System.out.println("請你輸入要查詢年份的日歷表:");this.year = in.nextInt();}

    ? (2).計(jì)算輸入年分每個(gè)月份的天數(shù)

    ? 用公式 year % 4 == 0 && year % 100 != 0 || year % 400 == 0判斷輸入年分是平年還是閏年:閏年二月有29天,平年有28天。

    public int reDays(int month) {int days = 0;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 4:case 6:case 9:case 11:days = 30;break;case 2:if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {days = 29;} else {days = 28;}break;}return days;}

    ? (3).計(jì)算輸入年分的第一天在本年中屬于第幾天,并由此計(jì)算出第一天的星期數(shù)

  • 本段代碼中int 型變量用于記錄每個(gè)月份的第一天為輸入年份中的第幾天。

  • 變量allDays初始化為1則是因?yàn)閒or循環(huán)語句塊在執(zhí)行過程中未能計(jì)算出一月份為本年中第一天

    則為后續(xù)計(jì)算方便規(guī)定allDays初始值為1;

  • 某月分前所有天數(shù)總和+1的值即為該月份的第一天在輸入年分的天數(shù)

  • 根據(jù)公式((year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + alldays) % 7計(jì)算出某一月份第一天的星期數(shù)

  • public int getMonthFirst(int month) {int alldays = 1;for (int i = 0; i < month; i++) {alldays += reDays(i);}return ((year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + alldays) % 7;}

    (4).完成日歷的輸出工作:

  • 完成日歷表頭的輸出

    查閱資料知悉日歷表的樣式:三行四列。

    用字符串?dāng)?shù)組存儲每個(gè)月份的中文字符總共十二個(gè)。

    String[] str = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };

    根據(jù)日歷表的樣式:輸出表頭,并根據(jù)需要調(diào)整日歷表表頭的位置,使其更為美觀。

  • ```javaSystem.out.println("\t\t\t\t\t\t\t\t2020年\n");for (int i = 0; i < str.length; i++) {if (i < 10) {System.out.printf("\t\t%s 月\t\t", str[i]);} else {System.out.printf("\t\t%s月\t\t", str[i]);}if ((i + 1) % 4 == 0) {System.out.println();for (int j = 1; j <= 4; j++) {System.out.print("\t一 二 三 四 五 六 日");}System.out.println()}```

    ? 跟據(jù)日歷樣式,每個(gè)月份天數(shù)的高度最多占六行,為保證所有日期正常輸出,則選取最高行數(shù):六行。

    ? 每行輸出四個(gè)月份的日歷。

    ? 隨后根據(jù) 需要的定義成員變量 count 初始值為0

    ```java int[] num = { 0, 0, 0, 0 }; //用于輔助日期的輸出System.out.println("\t\t\t\t\t\t\t\t2020年\n");for (int i = 0; i < str.length; i++) {if (i < 10) {System.out.printf("\t\t%s 月\t\t", str[i]);} else {System.out.printf("\t\t%s月\t\t", str[i]);}if ((i + 1) % 4 == 0) { // 判斷是否到達(dá)四月份的整數(shù)倍System.out.println();for (int j = 1; j <= 4; j++) {System.out.print("\t一 二 三 四 五 六 日");}System.out.println();for (int j = 1; j <= 6; j++) { //每個(gè)月份天數(shù)的高度最多占六行for (int s = 1 + (count * 4); s <= (4 + count * 4); s++) {//每行四個(gè)月份System.out.print("\t"); if (j == 1) { //每一個(gè)月份第一行的日期根據(jù)距離制表符末尾的空格數(shù)確定所處星期位置for (int k = 1; k <= (getMonthFirst(s) != 0 ? (getMonthFirst(s) - 1) : 6); k++) { System.out.print(" ");}}for (int m = 1+ num[(s - 1) % 4]; m <= 42/* reDays(s) */; m++) {if (m <= reDays(s)) { //使每個(gè)月份的日期輸出,滿六行,不足的部分用空格代替if (m < 10)System.out.printf("0%d ", m);elseSystem.out.printf("%d ", m);} else {System.out.print(" ");}num[(s - 1) % 4]++;if ((getMonthFirst(s) + m - 1) % 7 == 0) { //每個(gè)月份輸出一行結(jié)束后換行break;}}}System.out.println();}count += 1; // if ((i + 1) % 4 == 0) count自增} //1循環(huán),for (int s = 1 + (count * 4); s //<= (4 + count * 4); s++)進(jìn)入下一行的月份進(jìn)行輸出for (int j = 0; j < num.length; j++) { //輸出完一行月份的日歷后,數(shù)組的每個(gè)元素num[j] = 0; //便于下一行月份日歷的輸出}} }```

    3.完整代碼以及樣例輸出的呈現(xiàn)

    完整代碼

    import java.util.Scanner;public class Calender2 {Scanner in = new Scanner(System.in);String[] str = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };private int year;private int count;public Calender2() {getDate();}public void getDate() {System.out.println("請你輸入要查詢年份的日歷表:");this.year = in.nextInt();}public int reDays(int month) {int days = 0;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 4:case 6:case 9:case 11:days = 30;break;case 2:if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {days = 29;} else {days = 28;}break;}return days;}public int getMonthFirst(int month) {int alldays = 1;for (int i = 0; i < month; i++) {alldays += reDays(i);}return ((year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + alldays) % 7;}public void show() {int[] num = { 0, 0, 0, 0 };System.out.println("\t\t\t\t\t\t\t\t2020年\n");for (int i = 0; i < str.length; i++) {if (i < 10) {System.out.printf("\t\t%s 月\t\t", str[i]);} else {System.out.printf("\t\t%s月\t\t", str[i]);}if ((i + 1) % 4 == 0) {System.out.println();for (int j = 1; j <= 4; j++) {System.out.print("\t一 二 三 四 五 六 日");}System.out.println();for (int j = 1; j <= 6; j++) {for (int s = 1 + (count * 4); s <= (4 + count * 4); s++) {System.out.print("\t");if (j == 1) {for (int k = 1; k <= (getMonthFirst(s) != 0 ? (getMonthFirst(s) - 1) : 6); k++) {System.out.print(" ");}}for (int m = 1+ num[(s - 1) % 4]; m <= 42/* reDays(s) */; m++) {if (m <= reDays(s)) {if (m < 10)System.out.printf("0%d ", m);elseSystem.out.printf("%d ", m);} else {System.out.print(" ");}num[(s - 1) % 4]++;if ((getMonthFirst(s) + m - 1) % 7 == 0) {break;}}}System.out.println();}count += 1;}for (int j = 0; j < num.length; j++) {num[j] = 0;}}}public static void main(String[] args) {Calender2 c = new Calender2();c.show();} }

    顯示輸出樣例

    總結(jié)

    以上是生活随笔為你收集整理的简单日历的代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。