黑马程序员技术交流社区
标题:
关于Calendar类的问题,求大侠帮忙啦!
[打印本页]
作者:
a8851625
时间:
2014-10-31 00:11
标题:
关于Calendar类的问题,求大侠帮忙啦!
import java.util.*;
class CalendarDemo2
{
public static void main(String[] args)
{
Calendar c=Calendar.getInstance();
// c.set(2012,2,23);任意设置时间
c.add(Calendar.DAY_OF_MONTH,1);
printCalendar(c);
}
public static void printCalendar(Calendar c)
{
String[] mons={"一月","二月","三月","四月","五月","六月"
,"七月","八月","九月","十月","十一月"
,"十二月"};
String[] weeks={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
int index=c.get(Calendar.MONTH);
int index2=c.get(Calendar.DAY_OF_WEEK);
System.out.println(c.get(Calendar.YEAR)+"年");
System.out.println(mons[index]);
System.out.println(weeks[index2]);
}
}
c.add(Calendar.DAY_OF_MONTH,1);当我在这里延迟时间的时候比如,现在10月,我+3个月,按照比老师的说法应该会自动跳转到下一年1月的,可是我的确是ArrayIndexOutOfBoundsException异常。我添加天的时候也是,现在31一号,我多添加一天,也不会跳转到11月1号!!求解。。。毕老师在操作的时候都能成功顺延,我的是问题出在哪里?
作者:
wzg1015
时间:
2014-10-31 01:17
本帖最后由 wzg1015 于 2014-10-31 01:18 编辑
System.out.println(weeks[index2]);
老外一般第一天是星期日,所以你星期日要放最前面。
但因为数组是以0开始的,所以你的星数还需要减去1
最终需要改的地方有两处
String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
System.out.println(weeks[index2-1]);
作者:
hanxing
时间:
2014-10-31 19:51
楼上说的很对,遇到这种情况你要先分析,怎么分析呢?
你先把可能出错的地方注释掉,再用
System.out.println(index);
System.out.println(index2);打印一下不就知道错误在哪里了
作者:
zxbzxb333
时间:
2014-10-31 22:30
楼主的代码跟楼主的提问没什么关系..然后楼上的两位也没答到关键点上..
我来解答一下:
楼主你报的ArrayIndexOutOfBoundsException(数组角标越界异常)错误是在System.out.println(weeks[index2]);这一行报的,是因为你c.add(Calendar.DAY_OF_MONTH,1);这个代码把当前日期加了1所以结果就是2014年11月1日星期六,因为老外的习惯是把星期天作为一周的第一天,周六作为最后一天。所以int index2=c.get(Calendar.DAY_OF_WEEK);你这句代码的返回值index2其实是7,而你的weeks数组的最大索引是6,因此weeks[index2]这句就报角标越界异常了。
我按照你的代码稍微改了一下下,就得出你想要的结果了:
package java2;
import java.util.*;
class CalendarDemo2
{
public static void main(String[] args)
{
Calendar c=Calendar.getInstance();
// c.set(2012,2,23);任意设置时间
c.add(Calendar.MONTH,3);//月份加3
printCalendar(c);
}
public static void printCalendar(Calendar c)
{
String[] mons={"一月","二月","三月","四月","五月","六月"
,"七月","八月","九月","十月","十一月"
,"十二月"};
String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
int index=c.get(Calendar.MONTH);
int index2=c.get(Calendar.DAY_OF_WEEK);
System.out.println(c.get(Calendar.YEAR)+"年");
System.out.println(mons[index]);
// System.out.println(weeks[index2]);
System.out.println(c.get(Calendar.DAY_OF_MONTH));
}
}
结果是:
2015年
一月
31
作者:
a8851625
时间:
2014-11-1 13:51
谢谢各位的解答!看了你们的分析,终于找到自己问题所在了!!!
太感谢啦~~~
作者:
zhangyangLengen
时间:
2014-11-1 14:50
似乎星期的数组应该这样写:
String[] weeks={"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
星期天是第一天:对应的1,在数组角标中位置应该是第二位
作者:
zhangyangLengen
时间:
2014-11-1 14:53
java中月份的下标是从0开始的:角标0的位置是1月份
作者:
Eagle
时间:
2014-11-1 21:04
楼主没有仔细看视频啊。走神了吧。。哈哈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2