本帖最后由 龚首道 于 2013-7-3 11:14 编辑
各位大侠大家好,我是个菜鸟,首次在这里发帖,准备报云5,不知还来得及不。
今天在做练习题的时候遇到个小问题,想请教一下,代码些的烂,求指点。{:soso_e112:}
问题:获取任意年的二月有多少天。
小弟的代码和问题截图如下:- /*1、获取任意年的二月有多少天。
- 分析:要获取该数值,只需拿那一年的3月1日减去1天即可。
- 编程:首先用set方法设置指定的年份。
- 再用add方法给指定年份的3月1日加上-1,这样就得到了二月的最后一天,也就是二月总共的天数
- 然后输出这个值。
- 其中得编写自定义的日历输出格式,只显示有用信息。
- */
- import java.util.*;
- import java.text.*;
- class CalendarTest
- {
- public static void main(String[] args)
- {
- int y = 2014;
- Calendar c = Calendar.getInstance();//getInstance:使用默认时区和语言环境获得一个日历
- c.set(y,3,1);//自己将日期定义为y年
- c.add(Calendar.DAY_OF_MONTH,-1);//这里给天数减1了
-
- //打印年
- sop(getYear(c)+"年");
- //打印月
- sop(getMonth(c));
- //打印日
- sop(getDay(c));
- //打印星期
- sop(getWeek(c));
- }
- //获取日
- public static int getDay(Calendar c)
- {
- return c.get(Calendar.DAY_OF_MONTH);
- }
-
- //获取星期
- public static String getWeek(Calendar c)
- {
- String[] Week = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
- int indexWeek = c.get(Calendar.DAY_OF_WEEK);
- return Week[indexWeek];
- }
- //获取月份
- public static String getMonth(Calendar c)
- {
- //查表法
- String[] Month = {"","一月","二月","三月","四月","五月","六月", "七月","八月","九月","十月","十一月","十二月"};//角标从零开始,所以不能把月份写在0角标为上。
- //获取的月份或星期数作为角标
- int indexMonth = c.get(Calendar.MONTH);
- return Month[indexMonth];
- }
- //获取年
- public static int getYear(Calendar c)
- {
- return c.get(Calendar.YEAR);
- }
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }
复制代码 现在,问题就出来了!
如图:
大家帮我看看···为什么?
我估计可能是这里出了问题:
c.set(y,3,1);//自己将日期定义为y年
c.add(Calendar.DAY_OF_MONTH,-1);//这里给月份减1了
打印出来却是二月31日!!!
新问题又来了
但是,
①把这个数组里0角标为上的空去掉,- String[] Month = {"","一月","二月","三月","四月","五月","六月", "七月","八月","九月","十月","十一月","十二月"};
复制代码 然后②把 c.set(y,3,1);里的3该为2,即可正确显示。但是必须是①②同时满足时,才会输出正确。
WHY?
请赐教啊!
|