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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏征 中级黑马   /  2012-4-25 17:02  /  2818 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在看毕老师的视频讲Calendar类中,留了一个练习。一个学生从开始上这个学期上课期到结课一共上了多少天,周六日刨除。下列是我做的,编译通过了就是运行时卡在那里了。我把条件写成while(c.compareTo(c1)<=0)运行结果为0,不知道是否是思路错了,请高手指教提出错误,写出正确的做法。

class  CalendarTest
{
        public static void main(String[] args)
        {
                Calendar c1=Calendar.getInstance();
                c1.set(2012,6,10);
                int count=0;
                Calendar c=Calendar.getInstance();
                while(c.DAY_OF_YEAR<=c1.DAY_OF_YEAR)
                {
                        if (c.DAY_OF_WEEK>0&&c.DAY_OF_WEEK<6)
                        {
                                count++;
                        }
                        c.add(Calendar.DAY_OF_MONTH,1);
                }       

                System.out.println(count+"天");
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

12 个回复

倒序浏览
  1. Calendar c1=Calendar.getInstance();
  2.                 c1.set(2012,6,10);
  3.                 int count=0;
  4.                 Calendar c=Calendar.getInstance();
  5.                 while(c.get(Calendar.DAY_OF_YEAR)<=c1.get(Calendar.DAY_OF_YEAR))  //1.修改
  6.                 {
  7.                         if( c.get(Calendar.DAY_OF_WEEK)>1 && c.get(Calendar.DAY_OF_WEEK)<7) //2.修改,星期是从星期日(值为1)开始的
  8.                         {
  9.                                 count++;
  10.                         }
  11.                         c.add(Calendar.DAY_OF_MONTH,1);
  12.                 }        

  13.                 System.out.println(count+"天");
复制代码

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
谢谢啊 刚刚看完还不是很透彻多谢指教
回复 使用道具 举报
不是很明白
回复 使用道具 举报
怎么都是见代码就加分呢{:soso_e101:}
回复 使用道具 举报
刘基军 发表于 2012-4-25 17:41

我按照你的代码修改后编译完在运行时还是卡住了没有显示结果
回复 使用道具 举报
丁佼 黑马帝 2012-4-25 18:45:48
7#
DAY_OF_YEAR :get 和 set 的字段数字,指示当前年中的天数。

就是说这个DAY_OF_XX  使用时一般放在get和set函数的参数里。具体使用看二楼。
至于二楼的代码还是卡了,因为循环最后  c.add(Calendar.DAY_OF_MONTH,1);  把月份里的DAY增加,年里的DAY始终没变,循环无法终止,看样子是把你的代码copy之后改的,改成  c.add(Calendar.DAY_OF_YEAR,1); 就好,也就是把年里的DAY增加。

结果为  55天。

回复 使用道具 举报
丁佼 黑马帝 2012-4-25 18:46:10
8#
本帖最后由 丁佼 于 2012-4-25 18:48 编辑

网络卡了。多发一个,不会删。。。。
回复 使用道具 举报
刘基军 黑马帝 2012-4-25 18:59:58
9#
魏征 发表于 2012-4-25 18:15
我按照你的代码修改后编译完在运行时还是卡住了没有显示结果

LZ,确定都改成一样了..我测试过的
回复 使用道具 举报
刘基军 发表于 2012-4-25 18:59
LZ,确定都改成一样了..我测试过的

中间出了点小插曲,证实楼上的事正确的,谢谢
回复 使用道具 举报
丁佼 发表于 2012-4-25 18:45
DAY_OF_YEAR :get 和 set 的字段数字,指示当前年中的天数。

就是说这个DAY_OF_XX  使用时一般放在get和se ...

老兄,打扰一下,冒昧的确认一下:我的代码真的会卡吗?为什么我编译运行是正常的....:)
回复 使用道具 举报
丁佼 黑马帝 2012-4-25 21:12:42
12#
刘基军 发表于 2012-4-25 20:52
老兄,打扰一下,冒昧的确认一下:我的代码真的会卡吗?为什么我编译运行是正常的.... ...

抱歉,确实通过了,试了一下,把YEAR、MONTH、WEEK 增加,都可以正常结束循环。
(我之前函数理解错误。函数更新的是对象的日历,不是什么把MONTH属性的DAY增加1。)

之前我真是卡住了,可能是用完了楼主的代码就直接编译执行了你的代码,有临时变量之类的,也可能是我代码敲错。。。
再次抱歉。
回复 使用道具 举报
丁佼 发表于 2012-4-25 21:12
抱歉,确实通过了,试了一下,把YEAR、MONTH、WEEK 增加,都可以正常结束循环。
(我之前函数理解错误。 ...

呵呵,言重了老兄,我是怕我理解错了,所以才确认一下的,没其他意思,都是为了多学点:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马