/*
成都創新互聯公司專注于企業營銷型網站建設、網站重做改版、玉田網站定制設計、自適應品牌網站建設、H5建站、商城網站建設、集團公司官網建設、成都外貿網站制作、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為玉田等各大城市提供網站開發制作服務。
題目:輸出任意年份任意月份的日歷表(公元后)
思路:
1.已知1年1月1日是星期日,1?%?7?=?1?對應的是星期日,2?%?7?=?2?對應的是星期一,以此類推;
2.計算當年以前所有天數+當年當月1號之前所有天數;
a.年份分平年閏年,平年365天,閏年366天;
b.閏年的判斷方法year?%?400?==?0?||?(year?%?100?!=?0??year?%?4?==?0)若為真,則為閏年否則為平年;
c.定義平年/閏年數組,包含各月天數;
d.遍歷數組求和,計算當年當月前總天數;
e.當年以前所有天數+當年當月前總天數+1即為1年1月1日到當年當月1日的總天數;
3.總天數對7取模,根據結果判斷當月1號是星期幾,輸出空白區域;
4.輸出當月日歷表,逢星期六換行
*/
import?java.util.Scanner;
class?FindMonthList?{
public?static?void?main(String[]?args){
Scanner?sc?=?new?Scanner(System.in);
System.out.println("請輸入年份:");
int?year?=?sc.nextInt();????????????//年份
if?(year??1)?{????????????????????????//判斷非法輸入年份
System.out.println("輸入錯誤!");
return;
}
System.out.println("請輸入月份:");
int?month?=?sc.nextInt();????????????//月份
if?(month??1?||?month??12)?{????????//判斷非法輸入月份
System.out.println("輸入錯誤!");
return;
}
//輸出表頭
System.out.println("-------"?+?year?+?"?年?"?+?month?+?"?月?"?+?"-------");
System.out.println();
System.out.println("日??一??二??三??四??五??六");
//計算當前年份以前所有天數beforeYearTotalDay;每4年一個閏年,閏年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};????//閏年各月天數????int數組
int[]?arrNormalYear?=?{0,31,28,31,30,31,30,31,31,30,31,30,31};????//平年各月天數????int數組
int?beforeMonthTotalDay?=?0;????????????????????????????????????//定義本年當月之前月份的總天數
if?(year?%?400?==?0?||?(year?%?100?!=?0??year?%?4?==?0))?{????//判斷當前年份是否是閏年
for?(int?i?=?0?;?i??month?;?i?++?)?{????//for循環計算當月之前總天數
//計算當前月份之前的所有天數
beforeMonthTotalDay?=?beforeMonthTotalDay?+?arrLeapYear[i];
}
//判斷當月1日是星期幾
int?totalDay?=?beforeYearTotalDay?+?beforeMonthTotalDay?+?1;
int?week?=?totalDay?%?7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for?(int?i?=?0?;?i??(week?-?1?+?7)?%?7?;?i?++)?{????//如果寫成i??(week-1)會出現i-1的情況
System.out.print("????");//輸出開頭空白
}
for?(int?i?=?1?;i?=?arrLeapYear[month]?;i?++?)?{????//for循環輸出各月天數
System.out.print(i?+?"??");
if?(i??10?)?{????????//小于10的數補一個空格,以便打印整齊
System.out.print("?");
}
if?(i?%?7?==?((7-(week?-?1))?%?7?)?||?i?==?arrLeapYear[month])?{//每逢星期六/尾數換行
System.out.println();
}
}
}?else?{????????//不是閏年就是平年
for?(int?i?=?0?;?i??month?;?i?++?)?{????//for循環計算出當月之前月份總天數
beforeMonthTotalDay?=?beforeMonthTotalDay?+?arrNormalYear[i];
}
//判斷當月1日是星期幾
int?totalDay?=?beforeYearTotalDay?+?beforeMonthTotalDay?+?1;
int?week?=?totalDay?%?7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for?(int?i?=?0?;?i??(week?-?1?+?7)?%?7?;?i?++)?{????//如果寫成i??(week-1)會出現i-1的情況
System.out.print("????");//輸出開頭空白
}
for?(int?i?=?1?;i?=?arrNormalYear[month]?;i?++?)?{//for循環輸出各月天數
System.out.print(i?+?"??");
if?(i??10?)?{????????????//小于10的數補一個空格,以便打印整齊
System.out.print("?");
}
if?(i?%?7?==?((7-(week?-?1))?%?7?)?||?i?==?arrNormalYear[month])?{//每逢星期六/尾數換行
System.out.println();
}
}
}
}
}
效果:
/*
題目:輸出任意年份任意月份的日歷表(公元后)
思路:
1.已知1年1月1日是星期日,1?%?7?=?1?對應的是星期日,2?%?7?=?2?對應的是星期一,以此類推;
2.計算當年以前所有天數+當年當月1號之前所有天數;
a.年份分平年閏年,平年365天,閏年366天;
b.閏年的判斷方法year?%?400?==?0?||?(year?%?100?!=?0??year?%?4?==?0)若為真,則為閏年否則為平年;
c.定義平年/閏年數組,包含各月天數;
d.遍歷數組求和,計算當年當月前總天數;
e.當年以前所有天數+當年當月前總天數+1即為1年1月1日到當年當月1日的總天數;
3.總天數對7取模,根據結果判斷當月1號是星期幾,輸出空白區域;
4.輸出當月日歷表,逢星期六換行
*/
import?java.util.Scanner;
class?FindMonthList?{
public?static?void?main(String[]?args){
Scanner?sc?=?new?Scanner(System.in);
System.out.println("請輸入年份:");
int?year?=?sc.nextInt();????????????//年份
if?(year??1)?{????????????????????????//判斷非法輸入年份
System.out.println("輸入錯誤!");
return;
}
System.out.println("請輸入月份:");
int?month?=?sc.nextInt();????????????//月份
if?(month??1?||?month??12)?{????????//判斷非法輸入月份
System.out.println("輸入錯誤!");
return;
}
//輸出表頭
System.out.println("-------"?+?year?+?"?年?"?+?month?+?"?月?"?+?"-------");
System.out.println();
System.out.println("日??一??二??三??四??五??六");
//計算當前年份以前所有天數beforeYearTotalDay;每4年一個閏年,閏年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};????//閏年各月天數????int數組
int[]?arrNormalYear?=?{0,31,28,31,30,31,30,31,31,30,31,30,31};????//平年各月天數????int數組
int?beforeMonthTotalDay?=?0;????????????????????????????????????//定義本年當月之前月份的總天數
if?(year?%?400?==?0?||?(year?%?100?!=?0??year?%?4?==?0))?{????//判斷當前年份是否是閏年
for?(int?i?=?0?;?i??month?;?i?++?)?{????//for循環計算當月之前總天數
//計算當前月份之前的所有天數
beforeMonthTotalDay?=?beforeMonthTotalDay?+?arrLeapYear[i];
}
//判斷當月1日是星期幾
int?totalDay?=?beforeYearTotalDay?+?beforeMonthTotalDay?+?1;
int?week?=?totalDay?%?7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for?(int?i?=?0?;?i??(week?-?1?+?7)?%?7?;?i?++)?{????//如果寫成i??(week-1)會出現i-1的情況
System.out.print("????");//輸出開頭空白
}
for?(int?i?=?1?;i?=?arrLeapYear[month]?;i?++?)?{????//for循環輸出各月天數
System.out.print(i?+?"??");
if?(i??10?)?{????????//小于10的數補一個空格,以便打印整齊
System.out.print("?");
}
if?(i?%?7?==?((7-(week?-?1))?%?7?)?||?i?==?arrLeapYear[month])?{//每逢星期六/尾數換行
System.out.println();
}
}
}?else?{????????//不是閏年就是平年
for?(int?i?=?0?;?i??month?;?i?++?)?{????//for循環計算出當月之前月份總天數
beforeMonthTotalDay?=?beforeMonthTotalDay?+?arrNormalYear[i];
}
//判斷當月1日是星期幾
int?totalDay?=?beforeYearTotalDay?+?beforeMonthTotalDay?+?1;
int?week?=?totalDay?%?7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for?(int?i?=?0?;?i??(week?-?1?+?7)?%?7?;?i?++)?{????//如果寫成i??(week-1)會出現i-1的情況
System.out.print("????");//輸出開頭空白
}
for?(int?i?=?1?;i?=?arrNormalYear[month]?;i?++?)?{//for循環輸出各月天數
System.out.print(i?+?"??");
if?(i??10?)?{????????????//小于10的數補一個空格,以便打印整齊
System.out.print("?");
}
if?(i?%?7?==?((7-(week?-?1))?%?7?)?||?i?==?arrNormalYear[month])?{//每逢星期六/尾數換行
System.out.println();
}
}
}
}
}
顯示效果:
import?java.util.Calendar;
import?java.util.Date;
import?java.util.Scanner;
public?class?MyCalendar
{
public?static?void?main(String[]?args)
{
Scanner?scanner?=?new?Scanner(System.in);
String?reg?=?"^(\\d+)[^\\d]+((0?[1-9])|(1[012]))$";
while(true)
{
System.out.println("輸入年月(年和月用非數字隔開:如2015.1)(什么都不輸入直接退出)");
String?line?=?scanner.nextLine().trim();
if("".equals(line))
{
scanner.close();
break;
}
if(!line.matches(reg))
{
continue;
}
int?year?=?Integer.parseInt(line.replaceAll(reg,?"$1"));
int?month?=?Integer.parseInt(line.replaceAll(reg,?"$2"));
System.out.println("日\t一\t二\t三\t四\t五\t六");
Calendar?calendar?=?Calendar.getInstance();
//?這個月的1號是星期幾
calendar.set(year,?month?-?1,?1);
int?day?=?calendar.get(Calendar.DAY_OF_WEEK);
int?start?=?Calendar.SUNDAY;
calendar.add(Calendar.DATE,?-day?+?start);
while(start??day)
{
System.out.print(calendar.get(Calendar.DATE)?+?"\t");
calendar.add(Calendar.DATE,?1);
start++;
}
calendar.set(year,?month?-?1,?1);
Date?now?=?calendar.getTime();
calendar.set(year,?month,?1);
Date?next?=?calendar.getTime();
for(Date?cur?=?now;?cur.before(next);)
{
calendar.setTime(cur);
int?x?=?calendar.get(Calendar.DATE);
String?tmp?=?x??10???"0"?+?x?:?x?+?"";
System.out.print(tmp?+?"\t");
if(calendar.get(Calendar.DAY_OF_WEEK)?==?Calendar.SATURDAY)
{
System.out.println();
}
calendar.add(Calendar.DATE,?1);
cur?=?calendar.getTime();
}
calendar.add(Calendar.DATE,?-1);
int?to?=?calendar.get(Calendar.DAY_OF_WEEK);
int?end?=?Calendar.SATURDAY;
while(to??end)
{
calendar.add(Calendar.DATE,?1);
int?x?=?calendar.get(Calendar.DATE);
String?tmp?=?x??10???"0"?+?x?:?x?+?"";
System.out.print(tmp?+?"\t");
to++;
}
System.out.println();
}
}
}
先上張效果圖:以下是實現代碼:/*日歷*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.regex.Pattern;
import javax.swing.*;
public class Demo28 extends JFrame {
int m = 1;
String[] monthchoose = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12" }; // 存放月份的字符數組
String[] columnNames = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; // 存放星期的字符數組
Calendar ca = Calendar.getInstance();
Container contentPane = getContentPane();
VectorString vector = new VectorString();
String[][] date = new String[6][7]; // 表格的顯示數據的格式
TextField tf; // 文本框的值代表的是年份
JComboBox jb;
JTable table; // 把日期用table的方式顯示出來
public void getDate(String year, String month, String week, int Max_Day) {
int n = 0, b = 0;
// 動態把傳進來月份的天數存放到容器里
for (int j = 1; j = Max_Day; j++) {
vector.add(String.valueOf(j));
}
//每次往table里添加數據的時候,都預先把原table里 的 數據清空
for(int x = 0;xdate.length;x++){
for(int y = 0;ydate[x].length;y++){
date[x][y] = null;
}
}
// 根據傳進來月份的第一天是星期幾,來構建Table
for (int a = Integer.parseInt(week) - 1; a date[0].length; a++) {
date[0][a] = new String((String) vector.toArray()[n]);
n++;
}
for (int i = 1; i date.length; i++) {
for (int j = 0; j date[i].length; j++) {
if (n vector.size()) {
date[i][j] = new String((String) vector.toArray()[n]);
n++;
} else
break;
}
}
// 把容器里的數據全部清除,以備下次再存放新的數據
while (b vector.size()) {
vector.remove(b);
}
}
public void chooseDate(String day) {
JLabel label = new JLabel();
for (int y = 0; y date.length; y++) {
for (int z = 0; z date[y].length; z++) {
System.out.print(date[y][z] + " ");
System.out.println(day);
if (date[y][z] != null) {
if (date[y][z].equals(day)) {
table.setSelectionBackground(Color.yellow);
return;
}
}
}
}
}
public void paint() {
setTitle("日歷");
setBounds(200, 200, 350, 178);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
int m = 0;
String year = String.valueOf(ca.get(Calendar.YEAR)); // 得到當前的系統時間的年份,并把這個數值存放到year這個變量里
String month = String.valueOf(ca.get(Calendar.MONTH) + 1); // 得到當前的系統時間的月份,并把這個數值存放到month這個變量里
String day = String.valueOf(ca.get(Calendar.DATE)); // 得到當前的系統時間的日期,并把這個數值存放到day這個變量里
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 得到當前系統時間月份有多少天
getDate(year, month, week, Max_Day);
// 從月份數組里取出與當前系統時間一樣的月份值
for (int i = 0; i monthchoose.length; i++) {
if (monthchoose[i].equals(month)) {
m = i;
}
}
JToolBar toolBar = new JToolBar();
JButton b1 = new JButton("<");
b1.addMouseListener(new myMouseListener1());
JButton b2 = new JButton(">");
b2.addMouseListener(new myMouseListener2());
JLabel j1 = new JLabel("年");
JLabel j2 = new JLabel("月");
tf = new TextField(5);
tf.addKeyListener(new myKeyListener());
tf.setText(year);
jb = new JComboBox(monthchoose);
jb.setSelectedIndex(m);
jb.addActionListener(new myActionListener3());
table = new JTable(date, columnNames);
//table.addMouseListener(new tableMouseListener());
table.setPreferredScrollableViewportSize(new Dimension(350, 150));
JScrollPane jsp = new JScrollPane(table);
contentPane.add(jsp, BorderLayout.CENTER);
chooseDate(day);
toolBar.add(b1);
toolBar.add(tf);
toolBar.add(b2);
toolBar.add(j1);
toolBar.add(jb);
toolBar.add(j2);
toolBar.setLocation(0, 0);
toolBar.setSize(400, 15);
contentPane.add(toolBar, BorderLayout.NORTH);
setVisible(true);
new Thread(new PaintThread()).start(); // 調用內部類PaintThread,根據里面的設置來重畫
}
public static void main(String[] args) {
Demo28 d28 = new Demo28();
d28.paint();
}
// 鼠標單擊左邊按鈕觸發的事件
class myMouseListener1 extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
String str = tf.getText().trim(); // 得到文本框的值
int i = Integer.parseInt(str);
i = i - 1;
tf.setText(String.valueOf(i));
String new_year = String.valueOf(i); // 把表示年份的文本框的值存放到變量new_year里
ca.set(Calendar.YEAR, i); // 把Calendar 對象的YEAR設置為用戶設置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar對象的MONTH設置為用戶設置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置后的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}
class myKeyListener extends KeyAdapter {
public void keyReleased(KeyEvent e) {
try {
int i = Integer.parseInt(tf.getText().trim());
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
String new_year = String.valueOf(i);
ca.set(Calendar.YEAR, i); // 把Calendar對象的YEAR設置為用戶設置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar對象的MONTH設置為用戶設置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca
.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置后的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
} catch (NumberFormatException excption) {
System.out.println("你輸入的年份不正確!");
}
}
}
// 鼠標單擊右邊按鈕觸發的事件
class myMouseListener2 extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
String str = tf.getText().trim();
int i = Integer.parseInt(str);
i = i + 1;
tf.setText(String.valueOf(i));
String new_year = String.valueOf(i); // 把表示年份的文本框的值存放到變量new_year里
ca.set(Calendar.YEAR, i); // 把Calendar 對象的YEAR設置為用戶設置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar對象的MONTH設置為用戶設置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置后的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}
// 鼠標單擊選擇框觸發的事件
class myActionListener3 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String new_year = String.valueOf(ca.get(Calendar.YEAR)); // 把表示年份的文本框的值存放到變量new_year里
String new_month = (String) jb.getSelectedItem(); // 得到用戶設置的月份
ca.set(Calendar.MONTH, Integer.parseInt(new_month) - 1); // 把Calendar對象的月份值設置為用戶定義的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置后的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}
// 重畫組件
private class PaintThread implements Runnable {
public void run() {
while (true) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
分享名稱:java代碼輸出萬年歷 java輸出月歷
文章出自:http://vcdvsql.cn/article40/ddccheo.html
成都網站建設公司_創新互聯,為您提供關鍵詞優化、響應式網站、移動網站建設、微信公眾號、網站建設、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯