Java基础打印日历——知道1901.1.1是星期二
生活随笔
收集整理的這篇文章主要介紹了
Java基础打印日历——知道1901.1.1是星期二
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在知道1901.1.1是星期二的情況下,輸入1901.1后的年份和月份,輸出該年該月的日歷。
(知道1900.1.1是星期一的情況步驟都是一樣的)
思路:
?最終代碼運行效果如下:
首先還是定義需要的變量年份和月份,然后提醒用戶輸入賦值:
int year;//年份 int month;//月份 Scanner scanner=new scanner(system.in); System.out.print("請輸入1901年1月后的年份:"); year=scanner.nextInt(); System.out.print("請輸入1901年1月后的月份:"); month=scanner.nextInt();print(year,month); //調用打印方法然后創建一個打印方法print():
public static void print(int year,int month){//先打印表頭System.out.println("\t"+month+"月"+year+"年");System.out.println("============================"); //這個分割線按實際情況調整Syetem.out.println("\t日\t一\t二\t三\t四\t五\t六");//打印表體//首先要知道該月的第一天是星期幾int firstDay; //用來存儲星期數firstDay=getFirstDay(year,month); //獲得初始星期數if(firstDay>=7)firstDay-=7; //如果firstDay返回的值大于7了減去7就是正確的for(int i=1;i<=firstDay;i++){//第一天是星期幾就要在前面打印幾個\tSystem.out.print("\t"); //不要換行打印}//再要知道該月的天數int monthDays; //用來存儲該月天數monthDays=getMonthDays(month,year); //獲得該月天數for(int i=1;i<=monthDays;i++){ //從i=1開始打印System.out.print(i+"\t"); //不要換行打印firstDay++; //每打印一次星期數加一表示下一天的星期數if(firstDay==7){System.out.println("\n"); //每到星期七就換行打印,重新開始打印新的一行firstDay=0; //同時將星期數變為0}} }然后將要用到的方法補充完整:
//獲取第一天星期數: public static int getFirstDay(int year,int month){//用1901.1.1到輸入的年份月份的第一天之間的天數差值%7得到的數再加上1901.1.1的星期數就等于該月第一天星期數int sum=0; //定義一個sum代表差值for(int i=1901;i<=year;i++){if(year>1901){ //如果year不是1901的話,就要判斷year與1901間的年份是平年還是閏年if(isLeapYear(i)) //i代表1901起到year的每一年sum+=366; //閏年加366elsesum+=365; //平年加365}}for(int j=1;j<month;j++){ //假如是3月和1月之間,之間只需要加兩個月,所以不用<=month.switch(j){ //j代表從1月到month的每個月case 1:case 3:case 5:case 7:case 8:case 10:case 12:sum+=31;break; //大月case 2:if(isLeapYear(year)) //判斷平潤來決定二月份的天數sum+=29;break;elsesum+=28;break;default:sum+=30; // 小月}}return (sum%7+2); //1901.1.1是星期2 }//求該月的天數: public static int getMonthDays(int month,int year){switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 2:if(isLeapYear(year))retrun 29;else return 28;default:return 30;} }//判斷平潤年 public static Boolean isLeapYear(int year){if((year%4==0&&year%100!=0)||year%400==0)return true;elsereturn false;}程序差不多就這樣了,還可以給加一兩句防止出現輸入比1901小的年份以及不在0-12的月份,代碼如下:
do {System.out.println("請輸入1901年1月后的年份:");year=scanner.nextInt();if(year<1901)System.out.print("輸入錯誤,");//這里不換行輸出就可以把這句話直接接著上一句輸出}while(year<1901);do {System.out.println("請輸入1901年1月后的月份:");month=scanner.nextInt();if(month<=0||month>12)System.out.print("輸入錯誤,");}while(month<=0||month>12);總結
以上是生活随笔為你收集整理的Java基础打印日历——知道1901.1.1是星期二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云计算、边缘计算与雾计算
- 下一篇: 针对图像的一阶导数和二阶导数