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

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

 
本楼:
全局:
继续继续~~
回复

使用道具 举报

全局:
刚才图没传上

屏幕快照 2016-02-02 下午4.15.32.png (177.75 KB, 下载次数: 0)

homework2

homework2
回复

使用道具 举报

🔗
阿童木 2016-2-4 22:30:33 | 只看该作者
全局:
本帖最后由 阿童木 于 2016-2-4 22:34 编辑

运行截图


自我总结一下homework2里学到的东西。但想来想去还是贴出来,方便后面的同学参考~有些乱,希望不要介意1.Date类需要实现的功能:
(1)计算两个Date的时间差——方法:difference(
法1:这个要费脑,这个方法参考了前面的层主的思路,但我自己实现了代码,木有照搬他的。
如果两个年份相同,就用后面日期dayInYear减前面日期的dayInYear;
否则{
tempYear1 = previous.year; tempYear2 = later.year;
当tempYear2 - tempYear1 >1时,
{tempYear1 ++; diffDays += tempYear1的全年天数(用isLeapYear和 ? : )}
diffDays再加上later.dayInYear()加上previous全年的天数减去previous.dayInYear();}

法2:简单粗暴,不需要考虑中间复杂的计算过程和各种可能的情况,只是需要增加一个dayInAll()方法求出从A.D.1/1/1到现在的总天数。difference方法只需return days - d.days。
Added a private field days to store the number of days from Jan. 1, 1. Generate this value whenever a Date instance is created.
This would significant simplify the implemetation of methods isBefore() isAfter() and difference().
isBefore(): return days < d.days;
isAfter(): return days > d.days;
difference(): return days - d.days;

)很明显,当增加了dayInAll()方法后,代码重用度更高了。
(2)比较两个Date的大小——方法:isBefore和isAfter(根据Code Reusing的思想,isAfter里直接调用isBefore一行代码即可)
法1:见上         法2:在isBefore方法里用if-else分类讨论,isAfter里调用d.isBefore(this)即可。

2.关于日期计算的一些知识点
(1)闰年的判断:
  1. if((year%4==0&&year%100!=0)||year%400==0)    return true;
复制代码
(2)String对象的matches方法可以判断字符串与正则表达式是否匹配。
  1. if(s.matches("\\d{1,2}\\/\\d{1,2}\\/\\d{1,4}")){
复制代码
关于正则表达式http://docs.oracle.com/javase/7/docs/api/
(3)String对象的split方法可以按指定符号切割字符串并返回切割后的String数组。
(4)Integer.parseInt()方法将String转化为int
  1. String[] d=s.split("/");
  2.                   month=Integer.parseInt(d[0]);
  3.                   day=Integer.parseInt(d[1]);
  4.                   year=Integer.parseInt(d[2]);
复制代码
(5)System.exit(0);退出程序。
         而return语句是退出方法返回给调用者,只有main中的return语句才能退出整个程序。
————————
【分析】如果让我们自己写Date类的构造呢?以后要学会自己写出这样可以层层调用结构清晰的类。从程序功能入手,依次去想【这个类可以怎样被构造、需要哪些static方法来完成与对象无关的子功能、可否添加一些方法降低算法复杂度、toString()方法是否需要重写等
域:int moth,day,year;
构造函数:两个
  • 一种是由int型直接创建,一种是用String创建
static方法(想一下一个日期类需要哪些与特定(日期)对象无关的方法):
  • 判断日期是否合法——public static boolean isValidDate(int month, int day, int year);
  • 是否是闰年——public static boolean isLeapYear(int year)
  • 每个月有多少天——public static int daysInMonth(int month, int year)
普通方法:
  • 需要重写——public String toString();
  • 计算某一天是当年的第几天——public int dayInYear();
  • 自己添加的辅助方法——public int dayInAll();
  • 实现最终要求的功能——public boolean isBefore(Date d)/isAfer(Date d);和public int difference(Date d);


评分

参与人数 7大米 +65 学分 +1 收起 理由
beijixin + 3 感谢分享!
mrhfw + 3 感谢!学到好多
zhang123587 + 3 感谢分享!
破烂CC + 3 好赞好赞~
蔚蔚酱 + 3 感谢分享!

查看全部评分

回复

使用道具 举报

🔗
Damonizing 2016-2-5 14:57:38 | 只看该作者
全局:
本帖最后由 Damonizing 于 2016-2-5 14:59 编辑

难度不大


回复

使用道具 举报

🔗
shenrf 2016-2-9 19:19:10 | 只看该作者
全局:
Here you are

HW2.png (47.98 KB, 下载次数: 1)

HW2.png
回复

使用道具 举报

🔗
zhengyino1 2016-2-18 04:00:40 | 只看该作者
全局:
第二次交作业,坚持坚持

Screen Shot 2016-02-17 at 11.52.30 AM.png (93.59 KB, 下载次数: 1)

Screen Shot 2016-02-17 at 11.52.30 AM.png
回复

使用道具 举报

🔗
farewell 2016-2-26 14:45:24 | 只看该作者
全局:
本帖最后由 farewell 于 2016-2-26 14:47 编辑

坚持每天听一个lecture!

回复

使用道具 举报

🔗
fishgo 2016-2-28 20:36:05 | 只看该作者
全局:
竟然用到了正则表达式,课堂里没有提到。。。

asnwer.png (27.22 KB, 下载次数: 2)

asnwer.png
回复

使用道具 举报

🔗
jesse_youyi 2016-3-2 00:03:24 | 只看该作者
全局:
慢慢自己琢磨感觉还是能学到东西的!

123.png (25.01 KB, 下载次数: 1)

homework2

homework2
回复

使用道具 举报

🔗
rockleecsu 2016-3-3 09:37:34 | 只看该作者
全局:
交一下作业!!


回复

使用道具 举报

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

本版积分规则

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