java语言程序设计基础篇第八版_Java语言程序设计-基础篇-第八版-编程练习题-第八章...

该程序设计了一个简单的Java应用,用于根据用户输入的年份和月份生成日历。用户界面通过JOptionPane提示输入年份和月份,然后程序计算出当月的第一天,并打印出完整的月份日历。它考虑了闰年的条件,正确处理2月的天数。程序使用静态方法处理各个部分,包括计算起始日、总天数、月份天数和判断是否为闰年。
摘要由CSDN通过智能技术生成

package编程练习题chapter8;importjavax.swing.JOptionPane;public classExercise8_6 {static String output = "";public static voidmain(String[] args) {

String yearString= JOptionPane.showInputDialog(null,"Enter full year (i.e. 2001):", "Enter Year",

JOptionPane.QUESTION_MESSAGE);int year =Integer.parseInt(yearString);

String monthString= JOptionPane.showInputDialog(null,"Enter month in number between 1 and 12:", "Enter Month",

JOptionPane.QUESTION_MESSAGE);int month =Integer.parseInt(monthString);

printMonth(year, month);

JOptionPane.showMessageDialog(null, output);

}static void printMonth(int year, intmonth) {int startDay =getStartDay(year, month);int numOfDaysInMonth =getNumOfDaysInMonth(year, month);

printMonthTitle(year, month);

printMonthBody(startDay, numOfDaysInMonth);

}static int getStartDay(int year, intmonth) {int startDay1800 = 3;long totalNumOfDays =getTotalNumOfDays(year, month);return (int) ((totalNumOfDays + startDay1800) % 7);

}static long getTotalNumOfDays(int year, intmonth) {long total = 0;for (int i = 1800; i < year; i++)if(isLeapYear(i))

total= total + 366;elsetotal= total + 365;for (int i = 1; i < month; i++)

total= total +getNumOfDaysInMonth(year, i);returntotal;

}static int getNumOfDaysInMonth(int year, intmonth) {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)if(isLeapYear(year))return 29;else

return 28;return 0;

}static boolean isLeapYear(intyear) {if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))return true;return false;

}static void printMonthBody(int startDay, intnumOfDaysInMonth) {int i = 0;for (i = 0; i < startDay; i++)

output+= " ";for (i = 1; i <= numOfDaysInMonth; i++) {if (i < 10)

output+= " " +i;elseoutput+= " " +i;if ((i + startDay) % 7 == 0)

output+= "\n";

}

output+= "\n";

}/**Print the month title, i.e. May, 1999*/

static void printMonthTitle(int year, intmonth) {

output+= " " + getMonthName(month) + ", " + year + "\n";

output+= "------------------------------------\n";

output+= " Sun Mon Tue Wed Thu Fri Sat\n";

}static String getMonthName(intmonth) {

String monthName= null;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";

}returnmonthName;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值