黑马程序员技术交流社区

标题: 获取时间问题,18-04 Calendar [打印本页]

作者: 陈中岩    时间: 2013-4-16 03:18
标题: 获取时间问题,18-04 Calendar
本帖最后由 陈中岩 于 2013-4-16 12:26 编辑
  1. package demo;

  2. import java.util.Calendar;

  3. class CalendarDemo2 {
  4.         public static void main(String[] args)
  5.         {
  6.                 Calendar c = Calendar.getInstance();
  7.                
  8.                 c.set(2013,4,18);
  9.                
  10.                 printCalendar(c);
  11.                
  12.                
  13.         }
  14.         public static void printCalendar(Calendar c)
  15.         {

  16.                 //利用查表法,输出格式为大写月份,大写星期
  17.                 //月份表
  18.                 String[] months = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
  19.                 //星期表
  20.                 String[] weeks = {"星期六","星期日","星期一","星期二","星期三","星期四","星期五"};
  21.                
  22.                 int mon = c.get(Calendar.MONTH);
  23.                 int we = c.get(Calendar.DAY_OF_WEEK);
  24.                
  25.                 //获取年
  26.                 sop(c.get(Calendar.YEAR)+"年");
  27.                
  28.                 //获取月
  29.                 //sop((c.get(Calendar.MONTH)+1)+"月");
  30.                 sop(months[mon]);
  31.                 //获取日
  32.                 sop(c.get(Calendar.DAY_OF_MONTH)+"日");
  33.                
  34.                 //获取星期
  35.                 //sop("星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
  36.                 sop(weeks[we]);
  37.         }
  38.         public static void sop(Object obj)
  39.         {
  40.                 System.out.println(obj);
  41.         }
  42. }
复制代码
报的异常
2013年
五月
Exception in thread "main" 18日
java.lang.ArrayIndexOutOfBoundsException: 7
        at demo.CalendarDemo2.printCalendar(CalendarDemo2.java:39)
        at demo.CalendarDemo2.main(CalendarDemo2.java:12)

问题:为啥跟毕老师的代码一致,但是会出现上述异常呢?如何解决呢?
作者: 崔宝东    时间: 2013-4-16 08:18
本帖最后由 崔宝东 于 2013-4-16 08:22 编辑

public class CalendarDemo2 {

        public static void main(String[] args)

        {

                Calendar c = Calendar.getInstance();
//                c.set(2013, 4, 18);
                printCalendar(c);

        }

        public static void printCalendar(Calendar c)

        {

                // 利用查表法,输出格式为大写月份,大写星期

                // 月份表

                String[] months = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月",
                                "九月", "十月", "十一月", "十二月" };

                // 星期表

                String[] weeks = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五" ,"星期六"};

                int mon = c.get(Calendar.MONTH);

                int we = c.get(Calendar.DAY_OF_WEEK);

                // 获取年

                sop(c.get(Calendar.YEAR) + "年");

                // 获取月

                // sop((c.get(Calendar.MONTH)+1)+"月");

                sop(months[mon]);

                // 获取日

                sop(c.get(Calendar.DAY_OF_MONTH) + "日");

                // 获取星期

                // sop("星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
/**
* 注意数组的角标是从零开始的,另外还有就是你和毕老师的代码根本不一样呀,我记得不一样,呵呵。
* 另外外国人的第一天是星期日,还有就是数组角标从零开始,所以我定义一个""放在String数组的第一个元素占位
* 希望能帮到你;
*/

                sop(weeks[we]);

        }

        public static void sop(Object obj)

        {

                System.out.println(obj);

        }

}
作者: 崔宝东    时间: 2013-4-16 08:20
public class CalendarDemo2 {

        public static void main(String[] args)

        {

                Calendar c = Calendar.getInstance();
//                c.set(2013, 4, 18);
                printCalendar(c);

        }

        public static void printCalendar(Calendar c)

        {

                // 利用查表法,输出格式为大写月份,大写星期

                // 月份表

                String[] months = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月",
                                "九月", "十月", "十一月", "十二月" };

                // 星期表

                String[] weeks = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五" ,"星期六"};

                int mon = c.get(Calendar.MONTH);

                int we = c.get(Calendar.DAY_OF_WEEK);

                // 获取年

                sop(c.get(Calendar.YEAR) + "年");

                // 获取月

                // sop((c.get(Calendar.MONTH)+1)+"月");

                sop(months[mon]);

                // 获取日

                sop(c.get(Calendar.DAY_OF_MONTH) + "日");

                // 获取星期

                // sop("星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
/**
* 注意数组的角标是从零开始的,另外还有就是你和毕老师的代码根本不一样呀,我记得不一样,呵呵。
* 另外外国人的第一天是星期日,还有就是数组角标从零开始,所以我定义一个""放在String数组的第一个元素占位
* 希望能帮到你;
*/
                sop(weeks[we]);

        }

        public static void sop(Object obj)

        {

                System.out.println(obj);

        }

}
解决的问题在代码里面有注释;看一下这句的注释sop(weeks[we]);和    String[] weeks = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五" ,"星期六"};
的修改。
作者: 梁航斌    时间: 2013-4-16 08:32
  1. import java.util.Calendar;

  2. class CalendarDemo2 {
  3.         public static void main(String[] args)
  4.         {
  5.                 Calendar c = Calendar.getInstance();
  6.                
  7.                 c.set(2013,4,11);
  8.                
  9.                 printCalendar(c);
  10.                
  11.                
  12.         }
  13.         public static void printCalendar(Calendar c)
  14.         {

  15.                 //利用查表法,输出格式为大写月份,大写星期
  16.                 //月份表
  17.                 String[] months = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
  18.                 //星期表
  19.                 String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};//你的星期顺序排错了
  20.                
  21.                 int mon = c.get(Calendar.MONTH);
  22.                 int we = c.get(Calendar.DAY_OF_WEEK);
  23.                
  24.                 //获取年
  25.                 sop(c.get(Calendar.YEAR)+"年");
  26.                
  27.                 //获取月
  28.                 //sop((c.get(Calendar.MONTH)+1)+"月");
  29.                 sop(months[mon]);
  30.                 //获取日
  31.                 sop(c.get(Calendar.DAY_OF_MONTH)+"日");
  32.                
  33.                 //获取星期
  34.                 //sop("星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
  35.                 sop(weeks[we-1]);//星期的角标是从1开始的,所以你的代码如果不见减去1就会越界
  36.         }
  37.         public static void sop(Object obj)
  38.         {
  39.                 System.out.println(obj);
  40.         }
  41. }
复制代码
是你的星期顺序和角标的理解出了问题,应该是星期日开始,星期六结束。星期的角标是从1开始的。这个要注意
作者: 陈中岩    时间: 2013-4-16 12:26
梁航斌 发表于 2013-4-16 08:32
是你的星期顺序和角标的理解出了问题,应该是星期日开始,星期六结束。星期的角标是从1开始的。这个要注意 ...

谢谢。嗯嗯,问题解决了。
作者: 黄玉昆    时间: 2013-4-16 12:38
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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