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 除夕夜
 
 
Lec 4 - References, Recursion, and ListsLec 3 - Testing
Loading...
昊卿
昊卿
一个普通的干饭人🍚
最新发布
大一上学期总结
2025-3-9
4.1 多层感知机
2025-3-7
3.4 softmax 回归
2025-3-5
3.3 线性回归的简洁实现
2025-3-5
3.2 线性回归的从零开始实现
2025-3-5
3.1 线性回归
2025-3-5