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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangqing 中级黑马   /  2013-7-23 10:32  /  1245 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-24 21:07 编辑

public static void main(String[] args)
{
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int day =c.get(Calendar.DAY_OF_MONTH);
        //int week = getWeek(c.get(Calendar.DAY OF WEEK));
        //System.out.println(year+"年"mouth+"月"day+"日"+week);
        int week = c.get(c.get(Calendar.DAY_OF_WEEK));
        System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));
}
//public static int getWeek(int i)
        public static String getWeek(int i)
{
        String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        return weeks;
}

这个代码抛出异常的原因是由于什么导致的?
抛出的是 java.lang.ArrayIndexOutOfBoundsException       这个应该是角标越界啊

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

1 个回复

倒序浏览
错误的原因在于你的
int week = c.get(c.get(Calendar.DAY_OF_WEEK));
你使用了两次c.get方法,结果把原本应该取到的值改变到超出了数组下标的范围

例如,今天是星期二,你调用int week = c.get(Calendar.DAY_OF_WEEK);
取到的值应该是3,但是你再加上一层get方法后,现在把值变成了未知的
值,例如今天调用来是30,而你把你的计算机系统的时间改为24号,
可能取来是为4,改为25号,可能取来是为25,(你可以通过单步调试来查看week的值,也可以直接用 System.out.println(week)来检查追踪week的值)
这样的话你调用getWeek(week)时候把这些超过0到7范围的值穿了进去,所以就导致了
java.lang.ArrayIndexOutOfBoundsException

把你的int week = c.get(c.get(Calendar.DAY_OF_WEEK)); 改成 int week = c.get(Calendar.DAY_OF_WEEK);
就OK了


import java.util.Calendar;


public class Cal {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Calendar c = Calendar.getInstance();
                int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int day =c.get(Calendar.DAY_OF_MONTH);
        int week = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(week);
        System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));

        }
       
        public static String getWeek(int i){
                String[] weeks = {"","星期一","星期二","星期三","星期四","星期五",
                                "星期六"};
                return weeks[i];
               
        }

}

输出:
3
2013年7月23日星期三


评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马