type
status
date
slug
summary
tags
category
icon
password
这个lab主要是讲如何调试、测试的
Debugger
exercise 1
这个通过打断点,可以判断出最后一个round的结果不对,并且通过调试中的step into一步步查看传入函数、返回值等等的过程,最后发现是由于int直接截断,导致结果错误,改成float即可
exercise 2
这个是要做一个取两个数列中每一项最大数并相加的函数
这里主要是想讲一个step over的用法
这里一开始的max 和add函数都是乱给的,没想让你知道什么意思
通过一步步检查,发现传入max后返回值就是错的,返回的都是最小值(这里检查max返回值可以直接用step over)
然后直接重写max
接着检查,发现add后的结果也有问题,发现是加了两次
改完后就没问题了,答案是15
intList
addConstant
这里通过跑test发现链表的最后一位没有改变,回看源代码,发现是while的条件不对,提前结束了add constant这个步骤
世界上应该当head是空的时候再停止,而非head.rest也就是head的下一位
setToZeroIfMaxFEL
这个其实就是遍历链表,把其中的“回文数”替换成0
通过运行test发现最后一个样例错误,错误地把10变成0了
通过调试往回找,发现是判断首位是否相同的方法错误,把10这种特殊情况排除在外了,把while条件的
x>10
改成x≥10
即可squarePrimes
这里就给了一组测试样例,然而不足以发现错误,需要自己加一两组
后面经过测试,发现一个现象:对于链表中有多个符合条件的prime,只对第一个进行频繁操作了
然后开始排查错误,一开始我找半天找不到,最后在gpt的提示下想起了计导当时复习计组题的时候学到的逻辑判断运算的“短路操作”
也就是只要在&&运算中遇到了false,就直接返回,不进行后面的运算/判断
在这题中的 | | 也同理,因此需要更改boolean值的传递方式,我这里通过函数中的参数来传递
squarePrimes(IntList lst, boolean flag)
一开始尝试的时候想使用python的“默认参数”的方式,比如
boolean flag = false
,不过发现java好像不行所以只能再改一改测试样例,在传入list的时候再加上false即可
然而,传到grade scope后发现有些问题,就是封装的格式不对,最后接受的输入还是只能是一个参数
所以就学课上josh说的那样,写一个helper函数,在public的函数中运算helper,并且把flag赋值为默认的false即可
至此,我的61B第一个lab结束咯
2025.1.28 除夕夜
- 作者:昊卿
- 链接:hqhq1025.tech/article/cs61b/lab2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。