📣 独立日限时特惠: VIP通行证立减$68
查看: 47182| 回复: 227
跳转到指定楼层
上一主题 下一主题
收起左侧

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

 
全局:
公开课
学校名称: Berkeley
Unit号: 3
开课时间: 2014-05-15
课程全名: CS 61B Data Structures(in Java)
平台: 其他

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 jaly50 于 2014-5-14 23:39 编辑

作业入口:http://www.cs.berkeley.edu/~jrs/61b/lab/lab2/

看完第四课视频Types; conditionals就可以做这次的作业。
   

这课每周的lab在berkeley设置的是由两个人在2小时之内完成的,而15次lab只占总成绩的10%,因此我认为在三分地里出于展现学习进度的目的,用10次作业+3次project已经足够了,lab也全部算上的话太琐碎而没必要。


            经版友建议,咱们以后在地里就只要上传Project和Homework 运行成功+输出正确的图片 保持进度,才能加学分,lab自己私底下做完就好啦!

  作业要求:
      纠正Fraction.java里面的各种错误。     

   
This homework assignment is meant to make sure you can write, compile, and runsimple Java programs.  This is an individual assignment; you may not sharecode with other students. You will need to know how to compile and run Javaprograms, as described in Lab 1.


课程不鼓励大家分享代码,所以我讨论的规则是晒运行成功且输出正确的图。如下:




相关链接:      

       【公开课讨论+加分总贴】:UC Berkeley CS 61B Data Structures(in Java)
       【课程网站】:http://www.cs.berkeley.edu/~jrs/61b/
       【视频网站】:【Youtube】【Youku

        【教材】:Head First Java 【中文版】【英文版

号外:程序中给出的测试数据有限,欢迎大家踊跃上传自己的测试数据!!!






评分

参与人数 2大米 +3 学分 +1 收起 理由
小小溪 + 3 感谢分享!
sanguine + 1 好效率

查看全部评分


上一篇:Berkeley CS 61B Data Structures(in Java) Lab1 讨论帖
下一篇:[Coursera]An Introduction to Interactive Programming in Python Week #7
推荐
阿童木 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 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
Joseph_Liu 2015-5-23 10:29:24 | 只看该作者
全局:
本帖最后由 Joseph_Liu 于 2015-5-23 10:54 编辑


顺带一提,虽然定义Fraction类时,变量numerator和denominator都是private类型的,但只要是同类型的object都是可以access这两个private类型的变量的。

private means that only code within the same class can access the private thing. It means private to the class, not private to the object. One dog can see another Dog object's stuff, but a Cat can't see a Dog's private.
回复

使用道具 举报

推荐
wynnforce 2015-5-10 14:53:02 | 只看该作者
全局:
1. numberOfFractions的问题我个人认为楼上诸君已经讨论的很清楚了:   6的话更makes sense一点; 7是两次add时产生了一个中间结果多加了一次而已。
2. recursion的算法,核心就是
  1. gcd(x,y)=gcd(y,x%y);
复制代码
突然想到小学数学老师讲的辗转相除和这个简直就是一毛一样的算法,细思恐极(都一把年纪来还在整小学的东西...)
3. fracs()的改法是把class field里面改成static,method里面return的就不用加this了。
其实虽然题目明确要求不能改signature,但我认为good style是fracs()本身也应该是static method;这样可以保证一个实例都没有时依旧可以返回numberOfFractions.




回复

使用道具 举报

🔗
sqzhang17 2014-5-13 08:11:15 | 只看该作者
全局:
LZ的code是不是有点问题~
The total number of Fraction objects is 6~这个是不是应该是6~不是7~f0, f1, f2, f3, sumOfTwo, sumOfThree.
以下是我compile之后的terminal~






评分

参与人数 1学分 +1 收起 理由
jaly50 + 1 坚持的不错,再接再厉!

查看全部评分

回复

使用道具 举报

🔗
 楼主| jaly50 2014-5-13 23:48:59 | 只看该作者
全局:
sqzhang17 发表于 2014-5-13 08:11
LZ的code是不是有点问题~
The total number of Fraction objects is 6~这个是不是应该是6~不是7~ ...

SumOfThree
我是add了两次 所以就建了两个object
我是这样写的..所以就比你多一个了  Fraction sumOfThree =f0.add(f1).add(f2);  


你是 sumOfThree = sumOfTwo.add(f0)是嘛。。
回复

使用道具 举报

🔗
NanMic 2014-5-14 12:44:30 | 只看该作者
全局:
请教一下,fracs method 应该怎么写?别的都对了,就这个不知道怎么改 谢谢
回复

使用道具 举报

🔗
 楼主| jaly50 2014-5-14 21:37:20 | 只看该作者
全局:
NanMic 发表于 2014-5-14 12:44
请教一下,fracs method 应该怎么写?别的都对了,就这个不知道怎么改 谢谢

return this.numberOfFractions;
回复

使用道具 举报

🔗
oh_baizhima 2014-5-14 22:24:29 | 只看该作者
全局:
哈哈 这个课我之前四月份自己无聊时候做的,那也过来蹭学分一记!

Snip20140514_1.png (112.49 KB, 下载次数: 15)

Snip20140514_1.png
回复

使用道具 举报

🔗
 楼主| jaly50 2014-5-14 23:43:29 | 只看该作者
全局:
oh_baizhima 发表于 2014-5-14 22:24
哈哈 这个课我之前四月份自己无聊时候做的,那也过来蹭学分一记!

一亩三分地设学分的目的是鼓励大家学习,展现学习进度。嗯,而且这课作业多,设的分多....前任版主反对这样的加分方式,我们决定lab不加分了,10次homework+3次project足够督促大家跟上进度了。(在你传图之前已在主贴内说明)
回复

使用道具 举报

🔗
NanMic 2014-5-15 02:41:50 | 只看该作者
全局:
jaly50 发表于 2014-5-14 21:37
return this.numberOfFractions;

奇怪,我就是这么写的。加了个this。 但是最后结果是1 不知道为什么
回复

使用道具 举报

🔗
NanMic 2014-5-15 02:42:25 | 只看该作者
全局:
oh_baizhima 发表于 2014-5-14 22:24
哈哈 这个课我之前四月份自己无聊时候做的,那也过来蹭学分一记!

我的结果和你一样诶,不知道为什么 numberoffraction 的结果是1
回复

使用道具 举报

🔗
melissami 2014-5-15 06:25:19 | 只看该作者
全局:
lab2的运行截图



但是我的numOfFractions是8
是不是太大了。。。

不能分享代码,那就贴个片段,是不是我在求sum的时候创建了太多个object?
  1.     Fraction sumOfTwo = f1.add(f2);              // Sum of f1 and f2.
  2.     Fraction sumOfThree = (f0.add(f1)).add(f2);             // Sum of f0, f1, and f2.
复制代码
回复

使用道具 举报

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

本版积分规则

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