欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 實現(xiàn)萬年歷總結(jié)

 更新時間:2016年09月19日 09:40:57   作者:GuNai  
這篇文章主要介紹了Java 萬年歷實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下

一,Java實現(xiàn)萬年歷的代碼:

package calendar;
 
import java.util.Scanner;//日歷項目
public class RiLi{
 public static void main(String[] args){
 Scanner A=new Scanner(System.in);
 System.out.println("請輸入年份:");
 int year=A.nextInt();
 System.out.println("請輸入月份:");
 int month=A.nextInt();
 int sum=0;
 for(int i=1900;i<year;i++){
  if(i%4==0&&i%100!=0||i%400==0){
  sum=sum+366;
  }else{
  sum=sum+365;
  }
 }
 for(int i=1;i<month;i++){
  if(i==2){
  if(year%4==0&&year%100!=0||year%400==0){
   sum=sum+29;}
  else{
   sum=sum+28;
  }
  }else{
  if(i==4||i==6||i==9||i==11){
   sum+=30;
  }else{
   sum+=31;
  }
  }
 }
 sum=sum+1;
 int wekday=sum%7;
 System.out.println("日\t一\t二\t三\t四\t五\t六");
 for(int i=1;i<=wekday;i++){
  System.out.print("\t");
 }
 int f=0;
 if(month==4||month==6||month==9||month==11){
  f=30;}
 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){f=31;}
 if(month==2){
  if(year%4==0&&year%100!=0||year%400==0){f=29;}
  else{f=28;}
 }
 for(int i=1;i<=f;i++){
  if(sum%7==6){
  System.out.print(i+"\n");
  }else{
  System.out.print(i+"\t");
  }
  sum++;
 }
 }
}



二.一個Java萬年歷,比較簡單的那種,顯示年月日、星期幾、當前日期是第幾周、顯示閏年、打印萬年歷等,還可顯示當前日期是一年中的第幾天,指定日期是星期幾等,采用了基姆拉爾森計算公式 ,W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 ,在公式中d表示日期中的日數(shù),m表示月份數(shù),y表示年數(shù)。注意:在公式中有個與其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10則換算成:2003-13-10來代入公式計算。

public class myCalendar {

  //以下程序段是用來計算輸入日期為該年的第幾天的

  public static int cptDay(int year , int month , int day){

    byte dayadd[]={1,-2,1,0,1,0,1,1,0,1,0,1};  //用來存儲每個月天數(shù)和30的差值

    int daycount = 0;  //這是天數(shù)daycount計數(shù)器,初始化為0

      for(int i=0; i<month-1; i++)

        daycount+=(30+dayadd[i]);

      daycount+=day;

      return (month>2)?daycount+isLeap(year):daycount;

  }

  //閏年判定程序段,閏年返回1,平年返回0

  public static int isLeap(int year){

    if((year%400==0)||((year%4==0)&&(year%100!=0)))

      return 1;

    return 0;

  }

  //計算輸入日期是星期幾

  //采用了基姆拉爾森計算公式

  //W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

  //在公式中d表示日期中的日數(shù),m表示月份數(shù),y表示年數(shù)。

  //注意:在公式中有個與其他公式不同的地方:

  //把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10則換算成:2003-13-10來代入公式計算。

  public static int getWeek(int year,int month,int day){

    if(month<3)

    { month+=12; year--;}

    return (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;

  }

  //以下程序段是來計算輸入日期為該年第幾周的

  public static int weekCount(int year,int month,int day){

    int dayCnt = cptDay(year,month,day);

    int weekminus = getWeek(year,month,day)-getWeek(year,1,1);

    int weekCnt = 0;

    if(dayCnt%7==0) weekCnt = dayCnt/7+((weekminus>0)?1:0);

    else weekCnt = dayCnt/7+((weekminus>0)?2:1);

    return weekCnt;  

  }

  //打印萬年歷

  public static void printCal(int year){

    byte dayadd[]={0,1,-2,1,0,1,0,1,1,0,1,0,1}; //同樣的,每月天數(shù)和30的差值,注意,dadadd[0]的0并沒用到

    int wkpoint = getWeek(year,1,1);      //wkpoint用來指出當前日期的星期數(shù)   

    int t = 0;                 //t用來作為一個標記器,解決閏年2月有29天的問題

    int bk = 0;                 //bk用來記錄需輸空白的數(shù)目

    String week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

    for(int i=1;i<13;i++)

    {

      t = 0;

      bk = 0;

      if((i==2)&&(isLeap(year)==1))

        t = 1;               //當且僅當閏年的2月份才將其置為1

      System.out.println("\n\n\t\t"+year+" 年 "+i+" 月\n");

      for(int j=0;j<7;j++)

        System.out.print(week[j]+"\t");

      System.out.println();

      while(bk++<wkpoint)

        System.out.print('\t');

      for(int j=1;j<=(30+dayadd[i]+t);j++)

      {

        System.out.print(j+"\t");      //循環(huán)輸出每月日期

        if(wkpoint==6)

          { wkpoint = 0; System.out.print('\n');} //當wkpoint計數(shù)器為6時將其置為0,并換行

        else

          wkpoint++;                       

      }

    }
  }

  public static void main(String[] args){

    String week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

    System.out.println("輸入的日期是該年的第"+cptDay(2009,2,15)+"天");

    System.out.println("這一天是該年的第"+weekCount(2009,2,15)+"周 "+week[getWeek(2009,2,15)]);

    printCal(2009);

  }

}

三、

 1.用戶輸入信息-->進行信息判斷(是否符合要求)

2.以1900年1月1日(星期一)為基準,計算1900年1月1日至當日的總天數(shù)
   (1)先計算1900年至(用戶輸入的年 - 1)的總天數(shù)   -->注意平閏年之分
   (2)計算用戶輸入年份的1月至(用戶輸入月份 - 1)的天數(shù)

 3.計算輸入月份的第一天是星期幾

4.格式化輸出

以下我們按照步驟一步一步進行代碼解析

一)、利用do-while循環(huán)接受用戶輸入信息,并利用if-else語句進行判斷

int year;  
int month;  
boolean xn = false;  
do 
{  
      System.out.println("請輸入年份:");  
      year = input.nextInt();  
      System.out.println("請輸入月份:");  
      month = input.nextInt();  
      //利用boolean類型的表達式進行輸入信息的判斷  
      xn = (month < 1) || (month > 12) ||(year < 1);  
      if(xn)  
     {  
         System.out.println("輸入信息錯誤,請重新輸入!");  
     }  
}while(xn); 

二)、判斷平閏年,并計算1900年至(用戶輸入年 - 1)的總天數(shù)

int everyYearDay = 0; //每年的天數(shù)  
int totalYearsDays = 0; //計算年的天數(shù)  
int inputYearDay = 0  //記錄用戶輸入年的天數(shù)  
boolean yn = false;  //標識平閏年  
 
//利用for循環(huán)計算天數(shù)  
for(int i = 1900;i < =year;i ++)  
{  
   if(((i % 4 == 0)&&(i % 100 != 0))||(i % 400 == 0)) //閏年的判斷條件  
   {  
          yn = true;  
          everyYearDay = 366;  
   }  
   else 
  {  
          yn = false;  
          everyYearDay = 365;  
  }  
  //如果循環(huán)中的年份小于用戶輸入的年份,則累積天數(shù)  
 if(i < year)  
   {  
       totalYearsDays = totalYearsDays + everyYearDay;  
   }  
   else 
   {  
       inputYearDay = everyYearDay;  
       System.out.println(year + "年共有:" + inputYearDay + "天");  
   }  
} 

三)、判斷月份的天數(shù),并計算當年1月至(用戶輸入月份 -1)的天數(shù)

int everyMonthDay = 0;  //記錄每月的天數(shù)  
int totalMonthsDays = 0; //總天數(shù)  
int inputMonthDay = 0;  //記錄用戶輸入的月份在用戶輸入年份的天數(shù)  
 
//利用for循環(huán)計算天數(shù)  
for(int i = 1;i <= month;i ++)  
{  
   switch(i)  
   {  
       case 4:  
       case 6:  
       case 9:  
       case 11:  
            everyMonthDay = 30;  
            break;  
       case 2:  
            if(xn)  //xn是用來記錄平閏年的boolean類型的變量  
            {  
               everyMonthDay = 29;  
            }  
            else 
           {  
               everyMonthDay = 28;  
           }  
           break;  
       default:  
                everyMonthDay = 31;  
                break;  
   }  
   if(i < month)  
  {  
       totalMonthsDays = totalMonthsDays + everyMonthDay;  
  }  
  else 
  {  
        inputMonthDay = everyMonthDay;  
        System.out.println(month + "月共有:" + inputMonthDay + "天");  
  }  
} 

四)、計算總天數(shù),并計算出用戶輸入的月份的第一天星期幾

int total = totalMonthsDays + totalYearsDays; //計算總天數(shù)   
int temp = (total + 1) % 7; //判斷輸入月份的第一天星期幾 

五)、格式化輸出

//因為我們的輸入格式是  
//星期日 星期一 星期二 星期三 星期四 星期五 星期六  
//當星期日時的時候,我們直接輸出就好了,但是當  
//第一天是星期一的時候,我們就必須首先打印出空格  
//然后再輸出日期,才能讓號碼和星期想對應(yīng)  
//打印空格  
for(int spaceno = 0;spaceno < temp;spaceno ++)  
{  
   System.out.print("/t");  
}  
 
//按照順序打印號碼  
for(int i = 1;i <= inputMonthDay;i ++)  
{  
   if((total + i ) % 7)   //判斷是否該換行了  
   {  
        System.out.println(i );  
   }  
   else 
  {  
         System.out.print(i + "/t");  
  }  
} 

 

 

四、 java(用calendar類)寫一個萬年歷,輸入年并且顯示當年的日歷

public class MyCalendar {
  public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    Calendar c = Calendar.getInstance();
    System.out.println("請輸入數(shù)字年:(比如 2014)");
    int year = sc.nextInt();
    sc.close();
//   int year = 2014;
    c.set(Calendar.YEAR,year);
     
     
    for (int i = 0; i < 12; i++) {
      c.set(Calendar.MONTH,i); //
      c.set(Calendar.DATE,1); //設(shè)置成1月
      printMonth(c);
    } 
     
  }
   
  public static void printMonth(Calendar c){
    c.set(Calendar.DAY_OF_MONTH,1);  //設(shè)置成一日
    System.out.printf("\n\n========= %s 月 =========\n",c.get(Calendar.MONTH)+1);
    String[] weeks = { "日", "一" , "二", "三", "四", "五", "六" };
    for (int i = 0; i < weeks.length; i++) {
      System.out.printf("%s" + (i != 6 ?"\t":"\n"),weeks[i]);
    }
     
    int offday = c.get(Calendar.DAY_OF_WEEK) - 1;
     
    for(int i = 0; i < offday; i++){
      System.out.printf("\t");
    }
     
    int month = c.get(Calendar.MONTH);
    while(c.get(Calendar.MONTH) == month ){
      System.out.printf("%d" + ( (c.get(Calendar.DAY_OF_WEEK)) != 7 ? "\t":"\n") ,c.get(Calendar.DAY_OF_MONTH));
      c.add(Calendar.DAY_OF_MONTH, 1);
    }
  }
}

 五、程序:萬年歷+時鐘小程序?qū)崿F(xiàn)

java知識點有:java常用內(nèi)庫與工具(Date類、Calendar類等)、異常(try.....catch)、線程、AWT圖形用戶界面等基礎(chǔ)知識點。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
 
//創(chuàng)建窗口和年歷
class MainFrame extends JFrame{
JPanel panel=new JPanel(new BorderLayout());//BorderLayout為邊界布局
JPanel panel1=new JPanel();
JPanel panel2=new JPanel(new GridLayout(7,7));//GridLayout為網(wǎng)格布局
JPanel panel3=new JPanel();
JLabel []label=new JLabel[49];
JLabel y_label=new JLabel("年份");
JLabel m_label=new JLabel("月份");
JComboBox com1=new JComboBox();
JComboBox com2=new JComboBox();
JButton button=new JButton("查看");
int re_year,re_month;
int x_size,y_size;
String year_num;
Calendar now=Calendar.getInstance(); //實例化Calendar
MainFrame(){
super("萬年歷-Jackbase");
setSize(300,350);
x_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth());
y_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight());
setLocation((x_size-300)/2,(y_size-350)/2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.add(y_label);
panel1.add(com1);
panel1.add(m_label);
panel1.add(com2);
panel1.add(button);
for(int i=0;i<49;i++){
label=new JLabel("",JLabel.CENTER);//將顯示的字符設(shè)置為居中
panel2.add(label);
}
panel3.add(new Clock(this));
panel.add(panel1,BorderLayout.NORTH);
panel.add(panel2,BorderLayout.CENTER);
panel.add(panel3,BorderLayout.SOUTH);
panel.setBackground(Color.white);
panel1.setBackground(Color.white);
panel2.setBackground(Color.white);
panel3.setBackground(Color.white);
Init();
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int c_year,c_month,c_week;
c_year=Integer.parseInt(com1.getSelectedItem().toString()); //得到當前所選年份
c_month=Integer.parseInt(com2.getSelectedItem().toString())-1; //得到當前月份,并減1,計算機中的月為0-11
c_week=use(c_year,c_month); //調(diào)用函數(shù)use,得到星期幾
Resetday(c_week,c_year,c_month); //調(diào)用函數(shù)Resetday
}});
setContentPane(panel);
setVisible(true);
setResizable(false);
}
public void Init(){
int year,month_num,first_day_num;
String log[]={"日","一","二","三","四","五","六"};
for(int i=0;i<7;i++){
label.setText(log);
}
for(int i=0;i<49;i=i+7){
label.setForeground(Color.red); //將星期日的日期設(shè)置為紅色
}
for(int i=6;i<49;i=i+7){
label.setForeground(Color.red);//將星期六的日期也設(shè)置為紅色
}
for(int i=1;i<10000;i++){
com1.addItem(""+i);
}
for(int i=1;i<13;i++){
com2.addItem(""+i);
}
month_num=(int)(now.get(Calendar.MONTH)); //得到當前時間的月份
year=(int)(now.get(Calendar.YEAR)); //得到當前時間的年份
com1.setSelectedIndex(year-1); //設(shè)置下拉列表顯示為當前年
com2.setSelectedIndex(month_num); //設(shè)置下拉列表顯示為當前月
first_day_num=use(year,month_num);
Resetday(first_day_num,year,month_num);
}
public int use(int reyear,int remonth){
int week_num;
now.set(reyear,remonth,1); //設(shè)置時間為所要查詢的年月的第一天
week_num= (int)(now.get(Calendar.DAY_OF_WEEK));//得到第一天的星期
return week_num;
}
public void Resetday(int week_log,int year_log,int month_log){
int month_score_log; //判斷是否是閏年的標記
int month_day_score; //存儲月份的天數(shù)
int count;
month_score_log=0;
month_day_score=0;
count=1;
if(year_log%4==0&&year_log%100!=0||year_log%400==0){//判斷是否為閏年
month_score_log=1;
}
month_log=month_log+1; //將傳來的月份數(shù)加1
switch(month_log){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
month_day_score=31;
break;
case 4:
case 6:
case 9:
case 11:
month_day_score=30;
break;
case 2:
if(month_score_log==1){
month_day_score=29; 
}
else{
month_day_score=28;
}
break;
}
for(int i=7;i<49;i++){ //初始化標簽
label.setText("");
}
week_log=week_log+6; //將星期數(shù)加6,使顯示正確
month_day_score=month_day_score+week_log;
for(int i=week_log;i<month_day_score;i++,count++){
label.setText(count+"");
}
}
 
}
 
 
//創(chuàng)建時鐘
class Clock extends Canvas implements Runnable{
MainFrame mf;
Thread t;
String time;
Clock(MainFrame mf){
this.mf=mf;
setSize(400,40);
setBackground(Color.white);
t=new Thread(this); //實例化線程
t.start(); //調(diào)用線程 
}
public void run(){
while(true){
try{
t.sleep(1000); //休眠1秒鐘
}catch(InterruptedException e){
System.out.println("異常");
}
this.repaint(100);
}
}
public void paint(Graphics g){
Font f=new Font("宋體",Font.BOLD,16); 
SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化時間顯示類型
Calendar now=Calendar.getInstance();
time=SDF.format(now.getTime()); //得到當前日期和時間
g.setFont(f);
g.setColor(Color.red);
g.drawString(time,100,25);
}
}
 
 
public class Wnl{
public static void main(String [] args){
JFrame.setDefaultLookAndFeelDecorated(true);
MainFrame start=new MainFrame();
} 
}

以上就是Java 實現(xiàn)萬年歷的資料,希望能幫助實現(xiàn)該功能的朋友,謝謝大家對本站的支持!

相關(guān)文章

  • Mybatis之collection標簽中javaType和ofType屬性的區(qū)別說明

    Mybatis之collection標簽中javaType和ofType屬性的區(qū)別說明

    這篇文章主要介紹了Mybatis之collection標簽中javaType和ofType屬性的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 在eclipse中安裝Scala環(huán)境的步驟詳解

    在eclipse中安裝Scala環(huán)境的步驟詳解

    這篇文章主要介紹了在eclipse中安裝Scala環(huán)境的步驟,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Java獲取控制臺輸入的兩種方法小結(jié)

    Java獲取控制臺輸入的兩種方法小結(jié)

    這篇文章主要介紹了Java獲取控制臺輸入的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 一次詭異的full gc查找問題全過程

    一次詭異的full gc查找問題全過程

    這篇文章主要給大家分享介紹了一次詭異的full gc查找問題全部過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧啊
    2018-11-11
  • Spring @Configuration注解及配置方法

    Spring @Configuration注解及配置方法

    這篇文章主要介紹了Spring @Configuration注解及配置方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java并發(fā)編程之Executors類詳解

    Java并發(fā)編程之Executors類詳解

    今天給大家?guī)淼氖顷P(guān)于Java并發(fā)編程的相關(guān)知識,文章圍繞著Java Executors類展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • AQS核心流程解析cancelAcquire方法

    AQS核心流程解析cancelAcquire方法

    可以清楚的看到在互斥鎖和共享鎖的拿鎖過程中都是有調(diào)用此方法的,而cancelAcquire()方法是寫在finally代碼塊中,并且使用failed標志位來控制cancelAcquire()方法的執(zhí)行
    2023-04-04
  • 如何在java中使用Jython

    如何在java中使用Jython

    這篇文章主要介紹了如何在java中使用Jython,由于項目中需要用到Java調(diào)用Python的腳本,來實現(xiàn)一些功能,就對jython做了一些了解,通過jython可以實現(xiàn)java對python腳本的調(diào)用,需要的朋友可以參考一下
    2022-03-03
  • SpringBoot優(yōu)化連接數(shù)的方法詳解

    SpringBoot優(yōu)化連接數(shù)的方法詳解

    SpringBoot開發(fā)最大的好處是簡化配置,內(nèi)置了Tomcat,下面這篇文章主要給大家介紹了關(guān)于SpringBoot優(yōu)化連接數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實踐

    springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實踐

    本文主要介紹了springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04

最新評論