A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a8851625 中级黑马   /  2014-10-31 00:11  /  963 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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号!!求解。。。毕老师在操作的时候都能成功顺延,我的是问题出在哪里?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

7 个回复

正序浏览
Eagle 高级黑马 2014-11-1 21:04:21
8#
楼主没有仔细看视频啊。走神了吧。。哈哈
回复 使用道具 举报
java中月份的下标是从0开始的:角标0的位置是1月份
回复 使用道具 举报
似乎星期的数组应该这样写:
String[] weeks={"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
星期天是第一天:对应的1,在数组角标中位置应该是第二位
回复 使用道具 举报
谢谢各位的解答!看了你们的分析,终于找到自己问题所在了!!!
太感谢啦~~~
回复 使用道具 举报
楼主的代码跟楼主的提问没什么关系..然后楼上的两位也没答到关键点上..
我来解答一下:
楼主你报的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

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
楼上说的很对,遇到这种情况你要先分析,怎么分析呢?
你先把可能出错的地方注释掉,再用
  System.out.println(index);
  System.out.println(index2);打印一下不就知道错误在哪里了
回复 使用道具 举报
本帖最后由 wzg1015 于 2014-10-31 01:18 编辑

  System.out.println(weeks[index2]);
老外一般第一天是星期日,所以你星期日要放最前面。
但因为数组是以0开始的,所以你的星数还需要减去1
最终需要改的地方有两处
String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
System.out.println(weeks[index2-1]);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马