楼主: jaly50
跳转到指定楼层
上一主题 下一主题
收起左侧

Berkeley CS 61B Data Structures(in Java) Homework2 加分+讨论帖

 
🔗
Jerry_37 2018-3-4 10:15:33 | 只看该作者
全局:
magiccaicai 发表于 2018-1-31 08:48
交作业,谢谢各路大侠的hints
Testing constructors.
Date should be 1/1/1: 1/1/1

有截图咩,亲~
回复

使用道具 举报

🔗
wangylcun 2018-3-6 14:23:19 | 只看该作者
全局:
交第二次作业啦
回复

使用道具 举报

🔗
vincentli1 2018-3-10 00:02:53 | 只看该作者
全局:

第二次作业,跟上进度。


回复

使用道具 举报

🔗
Jason_Lee 2018-3-15 12:37:49 | 只看该作者
全局:
本帖最后由 Jason_Lee 于 2018-3-15 16:41 编辑

homework2
将问题层层拆解,由子功能来简化复杂功能的实现感觉真的很好,该hw可能就是要培养这一思维;
如isLeapYear在daysInMonth中的使用,用于给出二月的天数;daysInMonth在isValidDate中的使用,用以判断每一月的日是否valid;
isValidDate又在constructor中用来判断obj是否valid;非常喜欢这种拆解问题,解决复杂问题的感觉,hw2中给了个term是helper methods;
1. swich-case注意要给出default statement
2. 构造date时用isValidDate判断了年月日是否valid,对年月日的范围做了判断,以及判断了日在月中是否valid;
3.
(1)isBefore中只写了一个if语句,condition里给出了所有true的情况,然后else的其他情况均为false;
        本来想写多个if语句,分列出不同的情况显得似乎易读一些,但是这么做语句中没有else的话,会出现compiler error,显示没有return值;
        虽然用多个if已经涵盖了所有日期与日期之间的可能情况了,if语句中也都写了return,推测可能是java会考虑当所有if都不执行时也需要有返回值,
        这样的话确实就无法找到返回值了。
(2)isAfter可套用isBefore的语句,只需要特别考虑日期相同时的情况,由于在isbefore和isafter都为false,因此不能简单写成非isbefore;
(3)dayinyear用循环即可,用daysinmonth得到当前月之前月份的天数累加,最后加上当前月的天数即可;
(4)看到有人直接简单粗暴另写了一个计算从1/1/1到date的所有天数的methods,这样isbefore,isafter,difference很容易便能解决;
        我只用循环计算了相差的年份,具体做法是先用循环判断两日期年份大小,当d.year较小时,for(int i=d.year;i<this.year;i++),将
        this.year直到d.year前一年的日期全部加了起来,当然其中要判断是否时leapyear,最后再加上this.dayinyear-d.dayinyear将两个日期
        当年的天数考虑进去即可;另一种情况this.year较小时类似处理,但要考虑是要加还是减去一年的全年天数;
        由于我给了一个local variable初值即为this.dayinyear-d.dayinyear,因此当d.year==this.year时直接return这个local variable便能得到结果。
4. split method;
    integer.parseInt() method;
hw2只给了要看string method的hint,lecture中也没提到integer的methods,看了贴里回复在去查了interger.parseInt()method;后在reading过程中找到,S&B page292;
本来想直接在这个constructor里call另外一个constructor,可以少写一个if-else减少code duplication,但是又compiler error,说"constructor call must be the first statement in a constructor";
没办法只好再重复一遍上一个constructor中的语句;



运行结果如下:




补充内容 (2018-3-16 10:29):
关于Integer.parseInt()在lecture里提到了,是自己没记住,后来看notes看到了;另外textbook page117的box有更简洁的说明。
回复

使用道具 举报

🔗
beijixin 2018-3-20 00:09:42 | 只看该作者
全局:
交作业,顺便求学分~

hw2比hw1难度加大了不少,但收获也更大,搞明白好多之前不太注重的细节
例如: 一个method里如果全是if,没有 else,最后要加上return才能编译通过;

最后赞一下Berkeley的课程!



回复

使用道具 举报

🔗
GoldenArcher 2018-3-22 16:04:54 | 只看该作者
全局:
本帖最后由 GoldenArcher 于 2018-3-22 16:06 编辑



(啪)交作业了

粗心这毛病能折腾死我例如说简单的after可以用!before来写,然鹅没有读提示我debug了半天才想起来,哦,漏了equal case……
回复

使用道具 举报

🔗
HualingLax 2018-3-23 00:02:35 | 只看该作者
全局:
交作业~
不知道大家算date difference有没有更简便的办法?

回复

使用道具 举报

🔗
fsx340231 2018-3-26 21:09:54 | 只看该作者
全局:
参考了一下别人的代码,还是没太弄懂matches

Testing constructors.
Date should be 1/1/1: 1/1/1
Date should be 2/4/2: 2/4/2
Date should be 2/29/2000: 2/29/2000
Date should be 2/29/1904: 2/29/1904
Date should be 12/31/1975: 12/31/1975
Date should be 1/1/1976: 1/1/1976
Date should be 1/2/1976: 1/2/1976

Testing before and after.
1/1/1976 after 12/31/1975 should be true: true
1/2/1976 after 1/1/1976 should be true: true
12/31/1975 after 12/31/1975 should be false: false
12/31/1975 after 1/1/1976 should be false: false
1/1/1976 after 1/2/1976 should be false: false
12/31/1975 before 1/1/1976 should be true: true
1/1/1976 before 1/2/1976 should be true: true
12/31/1975 before 12/31/1975 should be false: false
1/1/1976 before 12/31/1975 should be false: false
1/2/1976 before 1/1/1976 should be false: false

Testing difference.
12/31/1975 - 12/31/1975 should be 0: 0
1/1/1976 - 12/31/1975 should be 1: 1
1/2/1976 - 12/31/1975 should be 2: 2
1/2/1976 - 2/27/1977 should be -422: -422
8/31/2110 - 2/27/1977 should be 48762: 48762


hw2.pdf

48.9 KB, 下载次数: 1, 下载积分: 大米 -1 颗

回复

使用道具 举报

🔗
olivine201311 2018-3-29 12:30:31 | 只看该作者
全局:
用eclipse写的, hw2强调了decompose的思想,能够帮助我们在以后做大型project时更好地进行项目拆分,同时通过实践对关键词this.static的理解也更加深刻虽然写出来了,感觉很多code不够精炼 比如多重嵌套的if-else其实可以用运算符来解决...求加分~




回复

使用道具 举报

🔗
bhlsp 2018-4-8 14:48:33 | 只看该作者
全局:
交作业
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表