黑马程序员技术交流社区

标题: 关于角标越界 [打印本页]

作者: yangqing    时间: 2013-7-23 10:32
标题: 关于角标越界
本帖最后由 杨兴庭 于 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       这个应该是角标越界啊


作者: 张yy    时间: 2013-7-23 12:08
错误的原因在于你的
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日星期三







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2