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

Berkeley CS 61B Data Structures(in Java) Lab2 讨论帖

 
🔗
xbl007 2015-12-31 06:52:01 | 只看该作者
全局:
lab2 的答案 字数字数字数

QQ截图20151230175329.png (9.63 KB, 下载次数: 6)

QQ截图20151230175329.png
回复

使用道具 举报

全局:

gcd 参考了老师给的hint,自己的方法会使得代码很长,老师的方法真心赞。
之前sumoftwo,参考了下某一楼的add,新手真心没想到用这个啊。




回复

使用道具 举报

🔗
frk 2016-1-15 13:06:19 | 只看该作者
全局:
java -g ,直接用java 来compile 也行吧?

也是和楼主一样,用的add().add()
terminal 运行结果。
回复

使用道具 举报

🔗
adrianh 2016-1-19 09:31:05 | 只看该作者
全局:
谢谢版主!交作业啦!

Selection_004.png (53.04 KB, 下载次数: 4)

Selection_004.png
回复

使用道具 举报

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

屏幕快照 2016-02-01 下午1.32.10.png (101.33 KB, 下载次数: 3)

lab2

lab2
回复

使用道具 举报

🔗
阿童木 2016-2-1 17:25:47 | 只看该作者
全局:
先交作业去吃个饭,回来慢慢把前面的回复看一遍,感觉这个lab2需要用心把一个个细小的点弄明白~


回复

使用道具 举报

🔗
阿童木 2016-2-2 10:03:22 | 只看该作者
全局:
本帖最后由 阿童木 于 2016-2-2 10:13 编辑

自我总结一下lab2里学到的东西(这一遍想把知识点都学扎实,所以我能想到的点都总结在下面,可能会比较啰嗦):
1.写代码时要注意运用Good Software Engineering的思想——Reusing Code!
举个栗子~
  1. public Fraction(int n, int d) {
  2.     if (n < 0) {
  3.       System.out.println("Fatal error:  Negative numerator.");
  4.       System.exit(0);
  5.     }
  6.     if (d < 1) {
  7.       System.out.println("Fatal error:  Nonpositive denominator.");
  8.       System.exit(0);
  9.     }
  10.     numberOfFractions++;
  11.     numerator = n;
  12.     denominator = d;
  13.   }
复制代码
然后其他的构造函数全部调用它,使得程序变得简短,并且如果后续我们发现构造函数有bug,只需要改动一个即可。
  1. public Fraction(int n) {
  2.     this(n, 1);
  3.   }

  4. public Fraction() {
  5.           this(0,1);
  6.   }

  7. public Fraction(Fraction original) {
  8.     this(original.numerator,original.denominator);
  9.   }
复制代码
In your own programs, if you find yourself copying multiple lines of code for reuse, it is usually wise to put the common code into a new shared method.


2.static域“numberOfFractions”用来计数(Fraction对象的个数)
   前面楼层的前辈说的观点我很赞同:
fracs()的改法是把class field里面改成static,method里面return的就不用加this了。
其实虽然题目明确要求不能改signature,但我认为good style是fracs()本身也应该是static method;这样可以保证一个实例都没有时依旧可以返回numberOfFractions.

至于numberOfFractions两种结果6和7:
Fraction sumOfThree = f0.add(sumOfTwo) 这样写可以保证fraction只被call一次 得到6
Fraction sunOfThree = f0.add(f1.add(f2))这样写得到7

3.java中每个类都有隐含的toString()方法,当这个类的对象被转换为字符串时会自动调用如果我们想让一个类以我们希望的方式转化成String类型,就必须重写toString()方法。


4.最大公约数算法——辗转相除
  1. static private int gcd(int x, int y) {
  2.           if(y==0)
  3.                   return x;
  4.           else
  5.                   return gcd(y,x%y);
  6.   }
复制代码
5.分数约分的方法:
先求numerator、denominator的最大公约数(gcd)
约分后的分数分子为numerator/gcd,分母为denominator/gcd。
  1. public String toString() {
  2.     int thisGcd = gcd(numerator, denominator);
  3.     return (numerator / thisGcd + "/" + denominator / thisGcd);
  4.   }
复制代码

评分

参与人数 1大米 +2 收起 理由
Soolizo + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
rockleecsu 2016-2-12 09:15:24 | 只看该作者
全局:

回复

使用道具 举报

🔗
fishgo 2016-2-24 16:53:18 | 只看该作者
全局:
递归真的做到头大了!

1.png (17.66 KB, 下载次数: 4)

1.png
回复

使用道具 举报

🔗
farewell 2016-2-25 15:19:40 | 只看该作者
全局:
坚持打卡
还是觉得6更合理点

回复

使用道具 举报

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

本版积分规则

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