0%

cs61b系列day1——Proj0

今天正式开始cs61b的学习,立志一天要完成一个星期的内容!

本来是这样想的。结果却成了这样:早上看video(感觉还行,老师比较有趣)、中午reading+一些exercise、下午proj0一部分(主要是建模)、晚上proj0完成(然而在autograder上仍然折腾了很久)。由此我深刻认识到了proj的任务量之大。

笔记总结

Reading

今天主要讲的是有关Object(对象)的部分

  1. Static vs. Non-Static Methods
    • static method(静态方法)只能被类名调用(有强制限制的因素,也有规范的因素)
    • static method不能访问class中的non-static variables。non-static variables只属于instance(实例)
  2. Constructors in Java
    Reading中介绍较少,只说明了这是使用new时构造instance的方法。根据我的观察,还有一下几点特征:
    1. 没有设置返回值
    2. 允许有多个不同参数、但名称相同的constructor
  3. 常量
    使用final修饰的变量中的值不能被改变。
  4. 命令行
    Java通过main函数中的String[] args参数嘟嘟命令行参数。与C最大的不同是,C中args[0]代表程序名称,而Java中args[0]代表第一个参数。

Proj 0

模拟宇宙中星体的运动。

  1. 命令行
    在terminal中传入命令行参数,形式为”java 类名 参数0 参数1 …”
  2. 标准库
    使用的是Princeton Standard Libraries,这个库的文档写得挺好。老师说之后会让我们接触Java真正的标准库。
  3. 建模
    牛顿第二定律、牛顿第三定律、万有引力定律,同时在时间上采用离散的形式,即在dt的极短时间内,将物体的运动看作匀变速直线运动。
  4. 单元测试
    我觉得这是这个项目最大的亮点,它为每个小功能都提供了测试。可能手动输入、肉眼差错的方法更快,但在更加大型的项目中,单元测试和文档测试是必要的。(我写得少啊)
  5. API
    在atuograder中,有一项检查为API Check。我将常量定义为public static final double G,它会提醒我应该把public换成private。
  6. 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。
  • 打分十分详细

拓展

还有没看完的文档

  1. Princeton Standard Libraries about the StdDraw section of this mini-tutorial
  2. Princeton Standard Libraries about full documentation for the In class