/*
為廬江等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及廬江網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站制作、廬江網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
題目:輸出任意年份任意月份的日歷表(公元后)
思路:
1.已知1年1月1日是星期日,1?%?7?=?1?對(duì)應(yīng)的是星期日,2?%?7?=?2?對(duì)應(yīng)的是星期一,以此類推;
2.計(jì)算當(dāng)年以前所有天數(shù)+當(dāng)年當(dāng)月1號(hào)之前所有天數(shù);
a.年份分平年閏年,平年365天,閏年366天;
b.閏年的判斷方法year?%?400?==?0?||?(year?%?100?!=?0??year?%?4?==?0)若為真,則為閏年否則為平年;
c.定義平年/閏年數(shù)組,包含各月天數(shù);
d.遍歷數(shù)組求和,計(jì)算當(dāng)年當(dāng)月前總天數(shù);
e.當(dāng)年以前所有天數(shù)+當(dāng)年當(dāng)月前總天數(shù)+1即為1年1月1日到當(dāng)年當(dāng)月1日的總天數(shù);
3.總天數(shù)對(duì)7取模,根據(jù)結(jié)果判斷當(dāng)月1號(hào)是星期幾,輸出空白區(qū)域;
4.輸出當(dāng)月日歷表,逢星期六換行
*/
import?java.util.Scanner;
class?FindMonthList?{
public?static?void?main(String[]?args){
Scanner?sc?=?new?Scanner(System.in);
System.out.println("請(qǐng)輸入年份:");
int?year?=?sc.nextInt();????????????//年份
if?(year??1)?{????????????????????????//判斷非法輸入年份
System.out.println("輸入錯(cuò)誤!");
return;
}
System.out.println("請(qǐng)輸入月份:");
int?month?=?sc.nextInt();????????????//月份
if?(month??1?||?month??12)?{????????//判斷非法輸入月份
System.out.println("輸入錯(cuò)誤!");
return;
}
//輸出表頭
System.out.println("-------"?+?year?+?"?年?"?+?month?+?"?月?"?+?"-------");
System.out.println();
System.out.println("日??一??二??三??四??五??六");
//計(jì)算當(dāng)前年份以前所有天數(shù)beforeYearTotalDay;每4年一個(gè)閏年,閏年366天,平年365天
int?beforeYearTotalDay?=?((year?-?1)?/?4?*?366)?+?(year-1?-?((year?-?1)?/?4))?*?365;
int[]?arrLeapYear?=?{0,31,29,31,30,31,30,31,31,30,31,30,31};????//閏年各月天數(shù)????int數(shù)組
int[]?arrNormalYear?=?{0,31,28,31,30,31,30,31,31,30,31,30,31};????//平年各月天數(shù)????int數(shù)組
int?beforeMonthTotalDay?=?0;????????????????????????????????????//定義本年當(dāng)月之前月份的總天數(shù)
if?(year?%?400?==?0?||?(year?%?100?!=?0??year?%?4?==?0))?{????//判斷當(dāng)前年份是否是閏年
for?(int?i?=?0?;?i??month?;?i?++?)?{????//for循環(huán)計(jì)算當(dāng)月之前總天數(shù)
//計(jì)算當(dāng)前月份之前的所有天數(shù)
beforeMonthTotalDay?=?beforeMonthTotalDay?+?arrLeapYear[i];
}
//判斷當(dāng)月1日是星期幾
int?totalDay?=?beforeYearTotalDay?+?beforeMonthTotalDay?+?1;
int?week?=?totalDay?%?7;//已知1年1月1日是星期日,即模7得1對(duì)應(yīng)的是星期日
for?(int?i?=?0?;?i??(week?-?1?+?7)?%?7?;?i?++)?{????//如果寫(xiě)成i??(week-1)會(huì)出現(xiàn)i-1的情況
System.out.print("????");//輸出開(kāi)頭空白
}
for?(int?i?=?1?;i?=?arrLeapYear[month]?;i?++?)?{????//for循環(huán)輸出各月天數(shù)
System.out.print(i?+?"??");
if?(i??10?)?{????????//小于10的數(shù)補(bǔ)一個(gè)空格,以便打印整齊
System.out.print("?");
}
if?(i?%?7?==?((7-(week?-?1))?%?7?)?||?i?==?arrLeapYear[month])?{//每逢星期六/尾數(shù)換行
System.out.println();
}
}
}?else?{????????//不是閏年就是平年
for?(int?i?=?0?;?i??month?;?i?++?)?{????//for循環(huán)計(jì)算出當(dāng)月之前月份總天數(shù)
beforeMonthTotalDay?=?beforeMonthTotalDay?+?arrNormalYear[i];
}
//判斷當(dāng)月1日是星期幾
int?totalDay?=?beforeYearTotalDay?+?beforeMonthTotalDay?+?1;
int?week?=?totalDay?%?7;//已知1年1月1日是星期日,即模7得1對(duì)應(yīng)的是星期日
for?(int?i?=?0?;?i??(week?-?1?+?7)?%?7?;?i?++)?{????//如果寫(xiě)成i??(week-1)會(huì)出現(xiàn)i-1的情況
System.out.print("????");//輸出開(kāi)頭空白
}
for?(int?i?=?1?;i?=?arrNormalYear[month]?;i?++?)?{//for循環(huán)輸出各月天數(shù)
System.out.print(i?+?"??");
if?(i??10?)?{????????????//小于10的數(shù)補(bǔ)一個(gè)空格,以便打印整齊
System.out.print("?");
}
if?(i?%?7?==?((7-(week?-?1))?%?7?)?||?i?==?arrNormalYear[month])?{//每逢星期六/尾數(shù)換行
System.out.println();
}
}
}
}
}
顯示效果:
給你一個(gè)現(xiàn)成的,我自己寫(xiě)的。
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
public class WanNianLi extends JFrame implements ActionListener {
private static int year,month,days;
private JButton[] btn=new JButton[days];
WanNianLi() {
super("萬(wàn)年歷");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout bl=new GridLayout(5,7);
JPanel pane=new JPanel();
pane.setLayout(bl);
for (int i=0;idays;i++) {
int temp=i+1;
btn[i]=new JButton(""+temp);
btn[i].addActionListener(this);
pane.add(btn[i]);
}
setContentPane(pane);
pack();
setLookAndFeel();
setVisible(true);
}
public static void main(String[] args) {
if (args.length0)
year=Integer.parseInt(args[0]);
else
year=1982;
if (args.length1)
month=Integer.parseInt(args[1]);
else
month=1;
GetDays gd=new GetDays(year,month);
days=gd.getDays();
new WanNianLi();
}
public void actionPerformed(ActionEvent evt) {
Object src=evt.getSource();
for (int i=0;idays;i++)
if (src==btn[i]) {
int day=i+1;
GetWeekday gw=new GetWeekday(year,month,day);
String str="";
switch (gw.getWeekday()) {
case 1:
str="天";
break;
case 2:
str="一";
break;
case 3:
str="二";
break;
case 4:
str="三";
break;
case 5:
str="四";
break;
case 6:
str="五";
break;
case 7:
str="六";
break;
}
setTitle(year+"年"+month+"月"+day+"日"+"星期"+str);
repaint();
}
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception e){
System.out.print(e.toString());
}
}
}
//////////////
//獲取星期幾//
//////////////
class GetWeekday {
private Calendar cal=Calendar.getInstance();
private static int weekday;
public int getWeekday() {
return weekday;
}
GetWeekday(int y,int m,int d) {
cal.clear();
cal.set(Calendar.YEAR,y);
cal.set(Calendar.MONTH,m-1);
cal.set(Calendar.DAY_OF_MONTH,d);
weekday=cal.get(Calendar.DAY_OF_WEEK);
}
}
////////////////////
//獲取當(dāng)前月的天數(shù)//
////////////////////
class GetDays {
private static int days;
public int getDays() {
return days;
}
GetDays(int y,int m) {
GregorianCalendar gc=new GregorianCalendar();
switch (m) {
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 (gc.isLeapYear(y))
days=29;
else
days=28;
break;
}
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class CalenderTrain extends JFrame implements ActionListener {
JComboBox Month = new JComboBox(); //月份下拉列表框
JComboBox Year = new JComboBox(); //年份下拉列表框
JLabel Year_l = new JLabel("Year::"); //定義標(biāo)簽
JLabel Month_l = new JLabel("Month::"); //定義標(biāo)簽
Date now_date = new Date(); //獲取今天的日期
JButton[] button_day = new JButton[49]; //定義一個(gè)數(shù)組用來(lái)存放日期
JButton button_ok = new JButton("Enter"); //現(xiàn)實(shí)選擇日期
JButton button_today = new JButton("Today"); //顯示今天按鈕
int now_year = now_date.getYear() + 1900; //獲取年份值
int now_month = now_date.getMonth(); //獲取月份值(當(dāng)前月份-1)
String year_int = null; //存放年份
int month_int; //存放月份
JPanel pane_ym = new JPanel(); //放置下拉列表框和控制按鈕面板
JPanel pane_day = new JPanel(); //放置日期面板
JPanel pane_parent = new JPanel(); //放置以上兩個(gè)面板
//定義方法繪制面板
public CalenderTrain() {
super("Calender!"); //設(shè)定面板得title
//---以下幾行使得關(guān)閉面板時(shí)退出程序
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClose(WindowEvent e) {
System.exit(0);
}
});
//---
setResizable(false); //面板的大小不能變化
//設(shè)定年月
/*年份的區(qū)間是當(dāng)前年份的過(guò)去10年到當(dāng)前年份的未來(lái)20年
* 月份正常1??12月
*/
for (int i = now_year - 10; i = now_year + 20; i++) {
Year.addItem(i + "");
}
for (int i = 1; i 13; i++) {
Month.addItem(i + "");
}
Year.setSelectedIndex(10);//設(shè)定年份下拉列表為當(dāng)前年份
pane_ym.add(Year_l);//添加年份標(biāo)簽
pane_ym.add(Year);//添加年份下拉列表框
Month.setSelectedIndex(now_month);//設(shè)定月份下拉列表為當(dāng)前月份
pane_ym.add(Month_l);//添加月份標(biāo)簽
pane_ym.add(Month);//添加月份下拉列表框
pane_ym.add(button_ok);//添加確定按鈕
pane_ym.add(button_today);//添加“今天”按鈕
button_ok.addActionListener(this);//確定按鈕添加監(jiān)聽(tīng)事件
button_today.addActionListener(this);//“今天”按鈕添加監(jiān)聽(tīng)事件
//年月設(shè)定結(jié)束
//初始化日期按鈕并繪制
pane_day.setLayout(new GridLayout(7, 7, 10, 10));
for (int i = 0; i 49; i++) {
button_day[i] = new JButton(" ");
pane_day.add(button_day[i]);
}
this.setDay();//調(diào)用setDay()方法
pane_parent.setLayout(new BorderLayout());//設(shè)定布局管理器
setContentPane(pane_day);
setContentPane(pane_ym);
pane_parent.add(pane_day, BorderLayout.SOUTH);
pane_parent.add(pane_ym, BorderLayout.NORTH);
setContentPane(pane_parent);
pack();
show();
}
void setDay() {
year_int = Year.getSelectedItem().toString();
month_int = Month.getSelectedIndex();
int year_sel = Integer.parseInt(year_int) - 1900;//獲得年份值
Date dt = new Date(year_sel, month_int, 1);//構(gòu)造一個(gè)日期
GregorianCalendar cal = new GregorianCalendar();//創(chuàng)建一個(gè)Calendar實(shí)例
cal.setTime(dt);
String week[] = { "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" };
int day = 0;//day中存放某個(gè)月份的天數(shù)
int day_week = 0;//用來(lái)存放某個(gè)月的第一天是星期幾的數(shù)值
//--將星期添加到前7個(gè)按鈕中
for (int i = 0; i 7; i++) {
button_day[i].setText(week[i]);
}
//--
/*判斷是幾月份,根據(jù)它來(lái)設(shè)定day的值
* 其中二月份要判斷是否是閏年
*/
if (month_int == 0
|| month_int == 2
|| month_int == 4
|| month_int == 6
|| month_int == 7
|| month_int == 9
|| month_int == 11) {
day = 31;
} else if (
month_int == 3
|| month_int == 5
|| month_int == 8
|| month_int == 10) {
day = 30;
} else {
if (cal.isLeapYear(year_sel)) {
day = 29;
} else {
day = 28;
}
}
day_week = 7 + dt.getDay();
int count = 1;
/*繪制按鈕
* 在這里我們首先要根據(jù)選定的月份的第一天是星期幾來(lái)確定我們繪制按鈕的起始位置
* 其中day_week就是我們要繪制的起始位置
* 對(duì)于那些沒(méi)有數(shù)值可以顯示的按鈕要置空
*/
for (int i = day_week; i day_week + day; count++, i++) {
if (i % 7 == 0
|| i == 13
|| i == 20
|| i == 27
|| i == 48
|| i == 34
|| i == 41) {
button_day[i].setForeground(Color.RED);
button_day[i].setText(count + "");
} else {
button_day[i].setText(count + "");
}
}
//--對(duì)于沒(méi)有日期數(shù)值顯示的按鈕進(jìn)行置空處理
if (day_week == 0) {
for (int i = day; i 49; i++) {
button_day[i].setText(" ");
}
} else {
//第一天前面的按鈕置空
for (int i = 7; i day_week; i++) {
button_day[i].setText(" ");
}//最后一天后面的按鈕置空
for (int i = day_week + day; i 49; i++) {
button_day[i].setText(" ");
}
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button_ok) {
this.setDay();//如果點(diǎn)擊確定按鈕就調(diào)用setDay()重新方法繪制按鈕
} else if (e.getSource() == button_today) {
new CalenderTrain();//如果點(diǎn)擊今天按鈕,得到今天的日期
}
}
public static void main(String[] args) {
CalenderTrain ct = new CalenderTrain();
}
}
package org.java.test;
import java.util.Scanner;
public class CalendarTest{
public static void main(String[] args) {
System.out.println("歡 迎 使 用 萬(wàn) 年 歷");
Scanner input = new Scanner(System.in);
System.out.print("\n請(qǐng)選擇年份: ");
int year = input.nextInt();
System.out.print("\n請(qǐng)選擇月份: ");
int month = input.nextInt();
System.out.println();
int days = 0; // 存儲(chǔ)當(dāng)月的天數(shù)
boolean isRn;
/* 判斷是否是閏年 */
if (year % 4 == 0 !(year % 100 == 0) || year % 400 == 0) { // 判斷是否為閏年
isRn = true; // 閏年
} else {
isRn = false;// 平年
}
/* 計(jì)算輸入的年份之前的天數(shù) */
int totalDays = 0;
for (int i = 1900; i year; i++) {
/* 判斷閏年或平年,并進(jìn)行天數(shù)累加 */
if (i % 4 == 0 !(i % 100 == 0) || i % 400 == 0) { // 判斷是否為閏年
totalDays = totalDays + 366; // 閏年366天
} else {
totalDays = totalDays + 365; // 平年365天
}
}
/* 計(jì)算輸入月份之前的天數(shù) */
int beforeDays = 0;
for (int i = 1; i = month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if (isRn) {
days = 29;
} else {
days = 28;
}
break;
default:
days = 30;
break;
}
if (i month) {
beforeDays = beforeDays + days;
}
}
totalDays = totalDays + beforeDays; // 距離1900年1月1日的天數(shù)
/* 計(jì)算星期幾 */
int firstDayOfMonth; // 存儲(chǔ)當(dāng)月第一天是星期幾:星期日為0,星期一~星期六為1~6
int temp = 1 + totalDays % 7; // 從1900年1月1日推算
if (temp == 7) { // 求當(dāng)月第一天
firstDayOfMonth = 0; // 周日
} else {
firstDayOfMonth = temp;
}
/* 輸出日歷 */
System.out.println("星期日\(chéng)t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int nullNo = 0; nullNo firstDayOfMonth; nullNo++) {
System.out.print("\t"); // 輸出空格
}
for (int i = 1; i = days; i++) {
System.out.print(i + "\t");
if ((totalDays + i-1) % 7 == 5) { // 如果當(dāng)天為周六,輸出換行
System.out.println();
}
}
}
}
這是你要的萬(wàn)年歷嗎?
新聞名稱:萬(wàn)年歷工具java源代碼 編寫(xiě)萬(wàn)年歷的代碼
瀏覽路徑:http://muchs.cn/article8/dohogip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、移動(dòng)網(wǎng)站建設(shè)、建站公司、域名注冊(cè)、商城網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)