JAVA编程问题:要求编写一个日历程序,要求显示各月的天数和日期.

JAVA编程问题:要求编写一个日历程序,要求显示各月的天数和日期.,第1张

额 好强大的问题额 代码太多我就不写了 提供下思路 首先接收 用户输入年份和月份 我们就不计算太远的了 就从1900年以上的年份开始计算 鄙人查过了1900年的一月一日是 星期一属于开始日期 接收好数据之后 循环累加 从用户输入的年份到1900年的总天数 for(int i = 1900;i<年份;i++){ //记住不能小于等于 因为月份是等下要累加的 if(i%4==0||i%400==0&&i%100!=0){ 润年:能给四整除或四百整除 但不能被100整除 sum +=366; // += 等价于sum = sum+366; }else{ sum +=365; } } 年份的天数累加好了 接着累加 月份的 先确定下 最后一个月份是不能累加的 因为最后一个月份是要用来显示的 我们先累加用户输入的月之前的 月份总天数 for(int i = 1;i<=月份;i++){ 这里就要小于和等于了 因为我们不但要计算输入月份之前的天数 还需要判断//最后一个月份的天数 switch(i){ case 1: case 3: case 5: case 7: case 8: case 11: day = 31; //大月为 1 3 5 7 8 11 break; case 2: if(i%4==0||i%400==0&&i%100!=0){ day = 28; }else{ day = 29; } break; //也可以用三目算法 day = i%4==0||i%400==0&&i%100!=0 28: 29; // 此算法一般只用于判断俩个 条件 后面要加问号哦 default: day = 30; } switch外面 for循环里面加入if判断 if(i<month){ // 这里必须是小于 不包括要输出的那个月份天数 sum +=day; } 好了 天数累加好了 接着计算星期几 week = sum%7 +1 这里加呢 是因为 我们计算的 天数之和 并无包括 1900年1月1日的 当天在内 求出了星期几之后还要加这个判断 if(week==7){ week = 0; } // 为什么呢 就是为了下面的格式化日期 Systemoutprintln(星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六); for(int i = 0;i<week;i++){ Systemoutprint(i+"\t"); } int g; for(int i = 1;i<=day;i++){ g = i + week; //天数加上星期几 这样刚好符合日期格式要求 if(g%7==0){ Systemoutprintln(); } } 动手做下看吧 没什么难度

import javautil;
class ViewMonth {
int month;
int year;
ViewMonth(final int displayMonth, final int displayYear) {
month = displayMonth;
year = displayYear;
}
private String checkMonth() {
String[] months = { "1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月",
"8 月", "9 月", "10 月", "11 月", "12 月" };
return months[month];
}
private int checkDays() {
int[] numofDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
return numofDays[month];
}
/
  使用此方法打印该月的日历
 /
void printMonth() {
/ 将该月份起始处的天数留空 /
int initialSpaces = 0;
try {
/ 获取月份名称 /
String monthName = checkMonth();
Systemoutprintln();
Systemoutprintln("\t\t\t " + year + " 年 " + monthName);
Systemoutprintln();
} catch (ArrayIndexOutOfBoundsException ae) {
Systemoutprintln("超出范围 ");
Systemexit(0);
}
GregorianCalendar cal = new GregorianCalendar(year, month, 1);
Systemoutprintln("\t日\t一\t二\t三\t四\t五\t六");
initialSpaces = calget(CalendarDAY_OF_WEEK) - 1;
/ 获取天数 /
int daysInMonth = checkDays();
/ 检查是否为闰年并为二月增加一天 /
if (calisLeapYear(calget(CalendarYEAR)) && month == 1) {
++daysInMonth;
}
for (int ctr = 0; ctr < initialSpaces; ctr++) {
Systemoutprint("\t");
}
for (int ctr = 1; ctr <= daysInMonth; ctr++) {
/ 为单个日期添加空格 /
if (ctr <= 9) {
Systemoutprint(" ");
}
Systemoutprint("\t" + ctr);
/ 检查行的末尾 /
if ((initialSpaces + ctr) % 7 == 0) {
Systemoutprintln();
} else {
Systemoutprint(" ");
}
}
Systemoutprintln();
}
}
class J7上机2 {
protected J7上机2() {
}
public static void main(String[] args) {
int month, year;
if (argslength == 2) {
Systemoutprintln("显示日历");
Systemoutprintln();
int mon = IntegerparseInt(args[0]);
month = mon - 1;
year = IntegerparseInt(args[1]);
} else {
Calendar today = CalendargetInstance();
month = todayget(CalendarMONTH);
year = todayget(CalendarYEAR);
}
ViewMonth mv = new ViewMonth(month, year);
mvprintMonth();
}
}

花了半个小时写了一个望采纳给好评。
import javautilScanner;
public class PrintCalendar {
/ Main method /
public static void main(String[] args) {
Scanner input = new Scanner(Systemin);
// Prompt the user to enter year
Systemoutprint("Enter full year (eg, 2001): ");
int year = inputnextInt();
// Prompt the user to enter month
Systemoutprint("Enter month in number between 1 and 12: ");
int month = inputnextInt();
// Print calendar for the month of the year
printMonth(year, month);
}
/ Print the calendar for a month in a year /
public static void printMonth(int year, int month) {
// Print the headings of the calendar
printMonthTitle(year, month);
// Print the body of the calendar
printMonthBody(year, month);
}
/ Print the month title, eg, May, 1999 /
public static void printMonthTitle(int year, int month) {
Systemoutprintln(" " + getMonthName(month)
+ " " + year);
Systemoutprintln("-----------------------------");
Systemoutprintln(" Sun Mon Tue Wed Thu Fri Sat");
}
/ Get the English name for the month /
public static String getMonthName(int month) {
String monthName = "";
switch (month) {
case 1: monthName = "January"; break;
case 2: monthName = "February"; break;
case 3: monthName = "March"; break;
case 4: monthName = "April"; break;
case 5: monthName = "May"; break;
case 6: monthName = "June"; break;
case 7: monthName = "July"; break;
case 8: monthName = "August"; break;
case 9: monthName = "September"; break;
case 10: monthName = "October"; break;
case 11: monthName = "November"; break;
case 12: monthName = "December";
}
return monthName;
}
/ Print month body /
public static void printMonthBody(int year, int month) {
// Get start day of the week for the first date in the month
int startDay = getStartDay(year, month);
// Get number of days in the month
int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
// Pad space before the first day of the month
int i = 0;
for (i = 0; i < startDay; i++)
Systemoutprint(" ");
for (i = 1; i <= numberOfDaysInMonth; i++) {
Systemoutprintf("%4d", i);
if ((i + startDay) % 7 == 0)
Systemoutprintln();
}
Systemoutprintln();
}
/ Get the start day of month/1/year /
public static int getStartDay(int year, int month) {
final int START_DAY_FOR_JAN_1_1800 = 3;
// Get total number of days from 1/1/1800 to month/1/year
int totalNumberOfDays = getTotalNumberOfDays(year, month);
// Return the start day for month/1/year
return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7;
}
/ Get the total number of days since January 1, 1800 /
public static int getTotalNumberOfDays(int year, int month) {
int total = 0;
// Get the total days from 1800 to 1/1/year
for (int i = 1800; i < year; i++)
if (isLeapYear(i))
total = total + 366;
else
total = total + 365;
// Add days from Jan to the month prior to the calendar month
for (int i = 1; i < month; i++)
total = total + getNumberOfDaysInMonth(year, i);
return total;
}
/ Get the number of days in a month /
public static int getNumberOfDaysInMonth(int year, int month) {
if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12)
return 31;
if (month == 4 || month == 6 || month == 9 || month == 11)
return 30;
if (month == 2) return isLeapYear(year) 29 : 28;
return 0; // If month is incorrect
}
/ Determine if it is a leap year /
public static boolean isLeapYear(int year) {
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/13381840.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-31
下一篇2025-08-31

发表评论

登录后才能评论

评论列表(0条)

    保存