java数组的实验结果分析,回顾大学--大一JAVA实验--实验六 数组

实验目的

熟练掌握一维及二维数组的使用

实验内容

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

有关输出日历的两点说明

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=(52*7+1)*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)

利用星期的周期性,将52*7*(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]

公式中的[...]指只取计算结果的整数部分。算出来的W除以7,余数是几就

是星期几。如果余数是0,则为星期日。

2. 要求显示日历的格式(以2009年9月为例):

2009-9

日  一  二  三  四  五  六

1   2   3   4   5

6   7   8   9  10  11  12

13  14  15  16  17  18  19

20  21  22  23  24  25  26

27  28  29  30

—————————————————————————————————————————————————————————————————————————————

—————————————————————————————————————————————————————————————————————————————

这个程序我记得我可是想了一个星期才做出来的

现在想想跟前面的MyDate程序差不多,只是在显示上稍微搞清点逻辑就好了

还是上图,类的结构如下:

0818b9ca8b590ca3270a3433284dd417.png

没有单独写类,直接main方法和类在一起的

1,这里有点不合要求的是getWeekDay方法:

private int getWeekDay(int year,int month,int day){

Calendar calWeek = new GregorianCalendar(year,month-1,day);

return (calWeek.get(Calendar.DAY_OF_WEEK)-1);

}

这里应该是自己手动计算的,按照上面计算某一天是星期几的公式,算出1月1日是星期几,后面的2月3日应该也好算的,我就不再弄那种麻烦事情啦.

2,getDay还是和上次的MyDate里面的一样:

private int getDay(int year,int month){

switch (month) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

return 31;

case 4:

case 6:

case 9:

case 11:

return 30;

case 2:

if (year % 4 == 0 && year % 100 != 0)

return 29;

else

return 28;

}

System.out.println("error month!");

return -1;

}

3,格式化输出display:其实我认为这个实验就是这里可能会与MyDate不同,格式化输出利用了笨方法,自己判断:

private void display(int year,int month,int day){

if(day==1)

{

for(int i=0;i

System.out.print(" ");

}

}

if(day<10)

System.out.print(" ");

System.out.print(" "+day);

if(getWeekDay(year,month,day)==6)

System.out.println();

}

这就是显示某一天,本来记得挺麻烦的,怎么现在看代码这么少啊!

4,显示所有的月份

shiyan6(String args){

int year = Integer.parseInt(args);

System.out.println();

System.out.println(" "+year+"年日历");

System.out.println();

for(int i=0;i<12;i++){

System.out.println(year+"-"+(i+1));

System.out.println(" 日 一 二 三 四 五 六");

for(int j=0;j

display(year,i+1,j+1);

}

System.out.println();

System.out.println();

}

} 利用上面显示某一天的display就很简单了,看来将问题分解的方式很管用啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值