JAVA03-for循环应用万年历写法

本文介绍了一个简单的万年历程序实现方法,通过计算任意日期距离1900年1月1日的天数来确定该日期是星期几。程序考虑了平年与闰年的区别,并能准确计算出每月的具体日期对应的星期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阶段项目:万年历

提示:
1.1900.1.1是星期一
2.想知道某一天星期几,需要算出这一天距离1900.1.1(包含这一天)过去了n天,
n%7=6,那么这一天就是星期六
我想知道2020年6.2日星期几
1.1900-2019年过去了n天
2.算今年过去了m天==>m=1~5月份的天数+2
如果用户输入2020年10月的数据

package com.qf;

import java.util.Scanner;

public class test2 {
    public static void main(String[] args) {
        System.out.println("欢迎来到万年历**********************");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份");
        int year = sc.nextInt();
        System.out.println("请输入月份");
        int month = sc.nextInt();
        System.out.println("您输入的是"+year+"年"+month+"月");

        int sumDay =0;
      //先算1900年-2020年过去了m天,因为2020没过完所以只要取到2019即可
        for(int i = 1900;i<year;i++){
            if(year%400==0||(year%4==0&&year%100!=0)){
                sumDay += 366;
            }else{
                sumDay += 365;
            }
        }
        //2020年输入的几月几日是第几天
        for(int i = 1;i<month;i++){
            switch (i){
                case 2:
                    //先判断今年是不是闰年
                    if(year%400==0||(year%4==0&&year%100!=0)){
                        sumDay += 29;
                    }else{
                        sumDay += 28;
                    }
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    sumDay += 30;
                    break;

                default:
                    sumDay += 31;
                    break;
            }
        }
        System.out.println("您输入的是"+year+"年"+month+"月1号星期"+(sumDay+1)%7);
        System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");

        //接下来需要算出这个月1号前有多少个星期被空格占住位置
        //怎么算?需要知道这个月的第一天星期几
        //星期日他的余数为0,而在循环中无法进入,但是实际情况中,前面需要执行6次
        int weekDay = (sumDay+1)%7==0?7:(sumDay+1)%7;
        for(int i =1;i<weekDay;i++){
            System.out.print("\t");
        }

        //需要知道当前月有多少天
        int monthDay=0;//用来记录当前月有多少天
        switch (month) {
            case 2:
                //需要知道今年是不是闰年
                if((year%4==0&&year%100!=0)||(year%400==0)){
                    monthDay=29;
                }else{
                    monthDay=28;
                }
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                monthDay=30;
                break;
            default:
                monthDay=31;
                break;
        }

        for(int i=1;i<=monthDay;i++){
            sumDay++;
            if(sumDay%7==0){
                System.out.println(i);
            }else{
                System.out.print(i+"\t");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值