日历盘

 

 

题目一:要求作出一个入下图所示的日历盘

代码实现:

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);
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值