**Java实验六**:由键盘输入年份,编写一个程序显示当年的日历,用Application程序实现。

这篇博客分享了一位Java初学者在实验六中遇到的挑战,即根据年份生成日历。博主详细介绍了计算特定年份1月1日是星期几的公式,并提供了程序的格式化输出示例。尽管实验要求使用数组,但博主未采用二维数组,而是通过其他方式实现了日历的展示。
摘要由CSDN通过智能技术生成

Java实验六由键盘输入年份,编写一个程序显示当年的日历,用Application程序实现。

开始学习java有几个月了,实验报告难度也梯度增加,前几篇无论难度高低,终究能东搜西查整出来,唯独这篇,虽然在我写的时候,csdn上也有两篇同主题文章,但要么程序复杂看不懂,要么有bug,叫人头疼。写下这篇,算是给后来的朋友一个简单的参考吧。

实验指导书部分内容:
有关输出日历的两点说明
1. 求某一年的1月1日是星期几的方法
假设当前年份为y,并忽略闰年,则从公元元年1月1日到y-1年共有365
(y-1)天,加上闰年多出来的天数,即加上1((y-1)/4-(y-1)/100+(y-1)/400),"/"为整除,得:365
(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)。
补上一个x(x是与公元元年1月1日是星期几有关的一个0~6的整数),并将这个表达式赋给变量t,即:*
t=x+365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)再用t除以7,余几即为星期几(余0为星期日)。
下面讨论x的求法:

如果知道公元元年1月1日是星期几,就可以直接得到x的值,但现在公式还没有求出来,不知道公元元年1月1日是星期几。不过没关系,毕竟知道最近的日期是星期几。不妨看一下2001年1月1日是星期几,结果是星期一,代入公式得t=x+730516,用730516除以7,得104355,余数是1,则为了保证2001年1月1日是星期一,取x 为0,至此,得到了完整的公式
t=365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)
再将它做一下改进,我们将公式变形为
t=(527+1)(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)
利用星期的周期性,将527(y-1)从公式中删除,得
t=(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)
所以求某一年的1月1日是星期几的最常见的公式为
W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] +1
*公式中的[…]指只取计算结果的整数部分。算出来的W除以7,余数是几就
是星期几。如果余数是0,则为星期日。

格式样例
在这里插入图片描述

虽然实验题目是数组,但实际写程序的时候,并没有用到二维数组,如果使用数组的目的是标记每个月月的天数,使用一维数组即可。
在考虑日历的格式化输出以及星期控制时,着实死了不少脑细胞。
一排三月目前没搞出来。

全部代码

import java.util.Scanner;
// 要求:熟练掌握一维及二维数组的使用
// 数组题  由键盘输入年份,编写一个程序显示当年的日历,用Application程序实现。

public class 日历6 {
   

    public static void main(String[] args) {
   
        //输入部分
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = scanner.nextInt();

        int yearDays = (year-
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值