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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用java输出一个月的日历表

發布時間:2024/3/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用java输出一个月的日历表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,想要輸出一個月的日歷,就需要知道日歷的規律,從1900年1月1號是星期1,那么本月日歷一號前面有幾個空的呢(拿百度日歷來講,第一行依次星期一到星期日)?因為一星期是七天,所以(從1900年到本月1號之前天數的總和)再處以七得到的余數就等于每個月1號前面的空格數.

?

? ? ? ? ? ? ? 如下圖,這是2022.04的日歷表

? ? ? ? ? ? ? 先理清一下思路,我們把第一行的星期數輸出,那是手拿把攥的事情;

? ? ? ? ? ? ? 第二行1號前面需要隔幾天呢,我們第一段已經講了,就是1900年到前一月的天數對7求余的余數.

? ? ? ? ? ? 那接下來我們主要就需要求1900年到前一個月的天數了,我們直接求不好求,可以分為年月兩部分,那就設1900年到今年初的總天數為allYearDays,今年年初到本月月初,也就是到前一個月的總天數(假如本月是4月,那就是1,2,3月的總天數)為allMonthDays,設今年年份是nowYear(自己輸入),本月月份是nowMonth(自己輸入),本月天數是monthDays(待定,需判斷)

? ? ? ? ? ? ? 年分為閏年和平年,所以需要判斷一下,可以被4整除但不能被100整除的是閏年;還有一種是可以被400整除也是閏年.這兩個條件有一個成立就是閏年,天數就是366天,否則就是平年365,

? ? ? ? ? 可是適用for循環和條件判斷來求年allYearDays的天數:

? ? ? ? ? ? for(int i=1900;i<newYear;i++){

? ? ? ? ? ? ? ? ? ? ?if((i%4==0&&i%100!=0)||i%==400){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? allYearDays+=366;

? ? ? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? ? ? ? ? allYearDays+=365;?

? ? ? ? ? ? ? ? ? }

? ????????}

這樣從1900年到前一年的總天數就算完了

但是判斷閏年平年使用if判斷有點繁瑣,我們也可以適用三目運算符,如下

? ? ? ? for(int i=1900;i<newYear;i++){

? ? ? ? ? allYearDays+=(i%4==0&&i%100!0)||i%400 ? 366:365;

????????}

同理求今年初到本月前一月的天數allMonthDays,也是兩種方法:

?for(int i=1;i<nowMonth;i++){

? ? ? ? ? if(i=1||i=3||i=5||i=7||i=8||i=10||i=12){

? ? ? ? ? ? ? ? ? ? ???allMonthDays+=31;

? ? ? ? ? ? }else if(i=2){

? ? ? ? ? ? ? ? ? ? ? if((nowYear%4==0||nowYear%100!=0)||nowYear%400==0){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? allMonthDays+=29;

? ? ? ? ? ? ? ? ? ? ?}else {

? ? ? ? ? ? ? ? ? ? ? ? ? allMonthDays+=28

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? allMonthDays+=30;

? ? ? ? ? ? }

}

第二種算也是利用三目運算符

?for(int i=1;i<nowMonth;i++){

? ? ? ? ?if(i==1||i=3||i=5||i=7||i=8||i=10||i=12){

? ? ? ? ? ? ? ?allMonthDays+=31;

? ? ? ? ? }else if(i=2){

? ? ? ? ? ? ? ? ? allMonthDays+=(nowYear%4==0||nowYear%100!=0)||nowYear%400==0 ? 29:28;

? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? allMonthDays+=30;

? ? ? ? ?}

}

成功的開端是勝利的一半,上面我們算出了從1900年到今年前一年的總天數allYearDays和今年初到本月前一月的總天數allMonthDays,那就可以算余數了,設余數為remainder,

? ? ?remainder=(allYearDays+allMonDays)%7;

接下來準備工作做好了,該輸出第一行的星期了

System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n");

接下來輸出這個月的天數,那輸出之前我們需要判斷一下這個月有幾天,利用if語句,同樣是兩種方法:

? ? ? ? ? ? if(nowMonth==1||nowMonth==3||nowMonth==5||nowMonth==7||nowMonth==8||nowMonth==10||nowMonth==12){

? ? ? ? ? monthDays=31;

}else if(nowMonth==2){

? ? ? ?if((nowYear%4==0||nowYear%100!=0)||nowYear%400==0){

? ? ? ? ? ? monthDays=29;

? ? ? ?}else{

? ? ? ? ? ? ? ?monthDays=28

? ? ? ?}

}else{

? ? ? ? ? ? ?monthDays=30;

? ? ? ? }

第二種:

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

? ? ? ? ? monthDays=31;

}else if(nowMonth==2){

? ? ? ? ?monthDays=(nowYear%4==0||nowYear%100!=0)||nowYear%400==0 ? 29:28;

}else{

? ? ? ? ? ?monthDays=30;

? }

接下來就是輸出了,第一行已經輸出了,所以先輸出第二行的空格,

? ? ? ?for(int i=1;i<=remainder;i++){

? ? ? ? ? ? ?System.out.println("\t");

? ? ? }

然后輸出本月的日期,注意每一行到七個數就需要換行,就是空格數加上號數是七的倍數就得換行

空格數就是我們上面求的余數remainder

for(int i=1;i<=monthDays;i++){

? ? ? ? if((i+remainder)%7==0){

? ? ? ? ? ? ? System.out.println(" 打兩個空格?"+i+"\t\n");

? ? ? ? }else {

? ? ? ? ? ? ? System.out.print("? 打兩個空格"+i+"\t");

? ? ? ? }

}

接下來就完成了,需要注意的是,小編條件有限,只能手動修改nowYear和nowMonth

?

import java.util.Scanner; public class Test{public static void main(String [] args){System.out.println("請依次輸入,你要打印的年份和月份:");Scanner in=new Scanner(System.in);int a=in.nextInt();int b=in.nextInt();/**定義需要的日期,從而實現本月的日歷打印**/int allYearDays=0;//從1900年到今年前一年的總天數int allMonthDays=0;//從今年開始到本月前一月的總天數int remainder=0;//從1900年到本月前一月的總天數除以7的余數int nowYear=a;//今年的年份int nowMonth=b;//本月的月份int monthDays=0;//這個月的天數,需要通過判斷/**接下來首先算日歷月份1號前面有幾個空格,通過1900年到本月前一月的天數總和除以7得到的余數得到,因為1900年1月一號是星期一**//**先算1900年到本年前一年的總天數**/for(int i=1900;i<nowYear;i++){allYearDays+=(i%4==0&&i%100!=0)||i%400==0 ? 366:365; //先判斷是平年還是閏年,然后再加起來,利用三目運算符 }/**然后算出今年初到本月前一月的總天數**/for(int i=1;i<nowMonth;i++){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){allMonthDays+=31;}else if(i==2){allMonthDays+=(nowYear%4==0&&nowYear%100!=0)||nowYear%400==0 ? 29:28;//判斷平年還是閏年的二月}else {allMonthDays+=30;}}/**現在總天數算完了,該算每個月前面的空格數了,就等于總天數除以7的余數**/remainder=(allYearDays+allMonthDays)%7;/**接下來先輸出每個月份上面的星期數,注意每個漢字是一個字符,一個制表符占四個字符位置需要對應**/System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n");/**下面就開始輸入一號前面的空格了**/for(int i=1;i<=remainder;i++){System.out.print("\t");}/**接下來開始輸入日期,每七個換一個行.但是還需要判斷一下本月有幾天**/if(nowMonth==1||nowMonth==3||nowMonth==5||nowMonth==7||nowMonth==8||nowMonth==10||nowMonth==12){monthDays=31;}else if(nowMonth==2){monthDays=(nowYear%4==0&&nowYear%100!=0)||nowYear%400==0 ? 29:28;}else {monthDays=30;}/**下面不賣關子了,開始輸出月份的號,同時需要判斷到一行七個數,需要ヾ(@^▽^@)ノ換行,需要注意可以添加一些空格使號和星期對齊*/for(int i=1;i<=monthDays;i++){if((i+remainder)%7==0){ //如果加上空格是七的倍數,那輸出完這個字符就換行了System.out.println(" "+i+"\t\n");}else{System.out.print(" "+i+"\t"); //否則就直接輸出}}} }

總結

以上是生活随笔為你收集整理的利用java输出一个月的日历表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。