题目一:要求作出一个入下图所示的日历盘
代码实现:
package prac1;
import java.util.Calendar;
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("Please type year");
int year=sc.nextInt();
System.out.println("Please type month");
int month=sc.nextInt();
Calendar ca=Calendar.getInstance();
ca.set(year,month-1,1);
int i=ca.get(Calendar.DAY_OF_WEEK);
int day=ca.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.print("日\t一\t二\t三\t四\t五\t六");
System.out.println();
/*也可以不使用count
if(i!=1){
for (int k = 1; k <i ; k++) {
System.out.print("\t");
}
}
for (int j = 1; j <=day ; j++) {
System.out.printf("%d\t",j);
if((j+i-1)%7==0) System.out.println();
}*/
int count=0;
if (i != 1) {
for (int j = 0; j < i; j++) {
System.out.print("\t");
count++;
}
}
for (int j = 1; j <= day; j++) {
System.out.printf("%d\t", j);
count++;
if (count % 7 == 0) System.out.println();
}
}
}
题目二:作出如下所示的日历盘,要求不能调用Calendar函数方法,并且把第多少周
代码实现
import java.util.Scanner;
public class demo01 {
// 判断是否是闰年
static boolean isleapyear(int year){
boolean i=year%400==0||year%4==0&&year%100!=0?true:false;
return i;
}
// 得出当前年份是多少天
static int dayofyear(int year){
int days=isleapyear(year)?366:365;
return days;
}
// 得出当前月份多少天
static int dayofmonth(int year,int month){
int days=0;
switch (month) {
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:
days=isleapyear(year)?29:28;
break;
}
return days;
}
// 得出当前年第一天为周几
static int dayweekyear(int year){
int week=666;
if(year>=2000){
int days=0;
for (int i = 2000; i < year; i++) {
days=days+dayofyear(i);
}
week=(6+days)%7+1;
}
else {
int days=0;
for (int i = 2000; i >year; i--) {
days=days+dayofyear(i);
}
week=6-days%7;
}
return week;
}
// 得出当前月份第一天为周几
static int dayofweek(int year,int month){
int weekday=8;
if(month==1)weekday=dayweekyear(year);
if(month>1){
int allday=0,num=0;
for (int i = 1; i < month; i++) {
int days=dayofmonth(year, i);
allday=num+days;
num=allday;
}
weekday=(allday+dayweekyear(year))%7;
if (weekday==0) {
weekday=7;
}
}
return weekday;
}
// 当前为最后一天为周几
static int lastdayofweek(int year,int month){
int week=0;
week=(dayofmonth(year, month)%7+dayofweek(year, month)-1)%7;
if(week==0)week=7;
return week;
}
// 在当前月最后一天的空格后面输出空格,以达到格式对齐
static void changeweek(int year,int month){
for (int i = 7; i >lastdayofweek(year, month); i--) {
System.out.print("\t");
}
}
// 打印日历盘
static void calendar(int year){
int daysofyear=dayofyear(year);
int week=1;
for (int i = 1; i <=12; i++) {
int daysofmonth=dayofmonth(year, i);
int dayofweek=dayofweek(year, i);
// 输出打印格式
System.out.print("\n\t\t"+year+"年"+i+"月"+"\n");
System.out.print("日\t一\t二\t三\t四\t五\t六\t周\n");
// 如果本月第一天不为周日,打印前面的空格,让第一天从正确的周几开始
for (int j = 1; j <dayofweek; j++) {
System.out.print("\t");
}
// 打印日历
for (int j = 1; j <=daysofmonth; j++) {
System.out.print(j+"\t");
// 当日为本周最后一天,普通打印时由于没有到当前周最后一天,所以不会打印出当前为多少周,所以在最后一天补充打印当前周为第多少周
if(j==daysofmonth){
changeweek(year, i);
if(lastdayofweek(year, i)!=7)System.out.print(week);
}
// 判断当日是否为本周最后一天,然后打印出当前为第多少周,然后叠加
if((dayofweek+j-1)%7==0){
System.out.print(week+"\n");
week++;
}
}
}
}
// 输入需要打印的年份,调用打印日历函数
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入年份:");
int year=sc.nextInt();
calendar(year);
}
}