今天正式开始cs61b的学习,立志一天要完成一个星期的内容!
本来是这样想的。结果却成了这样:早上看video(感觉还行,老师比较有趣)、中午reading+一些exercise、下午proj0一部分(主要是建模)、晚上proj0完成(然而在autograder上仍然折腾了很久)。由此我深刻认识到了proj的任务量之大。
笔记总结
Reading
今天主要讲的是有关Object(对象)的部分
- Static vs. Non-Static Methods
- static method(静态方法)只能被类名调用(有强制限制的因素,也有规范的因素)
- static method不能访问class中的non-static variables。non-static variables只属于instance(实例)
- Constructors in Java
Reading中介绍较少,只说明了这是使用new时构造instance的方法。根据我的观察,还有一下几点特征:- 没有设置返回值
- 允许有多个不同参数、但名称相同的constructor
- 常量
使用final修饰的变量中的值不能被改变。 - 命令行
Java通过main函数中的String[] args参数嘟嘟命令行参数。与C最大的不同是,C中args[0]代表程序名称,而Java中args[0]代表第一个参数。
Proj 0
模拟宇宙中星体的运动。
- 命令行
在terminal中传入命令行参数,形式为”java 类名 参数0 参数1 …” - 标准库
使用的是Princeton Standard Libraries,这个库的文档写得挺好。老师说之后会让我们接触Java真正的标准库。 - 建模
牛顿第二定律、牛顿第三定律、万有引力定律,同时在时间上采用离散的形式,即在dt的极短时间内,将物体的运动看作匀变速直线运动。 - 单元测试
我觉得这是这个项目最大的亮点,它为每个小功能都提供了测试。可能手动输入、肉眼差错的方法更快,但在更加大型的项目中,单元测试和文档测试是必要的。(我写得少啊) - API
在atuograder中,有一项检查为API Check。我将常量定义为public static final double G,它会提醒我应该把public换成private。 - Java语法
需要注意的点:static和instance(non-static) method的区别
- 效果图:
感受
Project 0
- 我以为只是将Reading 1.2的内容应用就好了,没想到还拓展了这么多东西…
- 脚手架搭好了,教程就差塞进你脑袋里了,还是花了很多时间。
可能的原因:一部分时间花在debug上(有一个bug花的时间比较多),少部分时间花在建立逻辑上,还有一部分时间都在阅读材料、查看文档。感觉找不出花在哪个部分的时间较多。 - 后续有Extra for Experts板块作为延伸,且验证的方式也很有趣:制作一个视频并展示你的成果(但不能附上代码)。
- 还有Frequently Asked Questions板块,回答一些被频繁问到的问题。
autograder
- cs61bsp-18中autograder为Gradescope,向公众开放。
- 在该课程中,Gradescope从Github上获取你的repo。
- 打分十分详细
拓展
还有没看完的文档
- Princeton Standard Libraries about the StdDraw section of this mini-tutorial
- Princeton Standard Libraries about full documentation for the In class