FAQ - Project 2A
课程组会持续更新此页面,解答大家关于项目的问题!如果你的问题在这里找不到答案,可以在实验课、答疑时间 (OH) 或者 Ed 上提问!
在循环中调用 .years()
这可能会导致问题,尽量避免在循环中调用 .years()
。
我收到 SLF4J: No SLF4J providers were found.
错误,我该怎么办?
收到此错误没关系。你的代码还是能跑的。如果想消除这个错误,可以试试拉取 library-fa23
然后重新导入库。
设置
我在导入时遇到错误,例如 Cannot resolve symbol 'spark'
,但已经在 IntelliJ 中选择了 library-fa23 文件。
按照说明:你还需要进入 library-fa23
文件夹,运行 git pull
,确保你拥有项目需要的所有库文件。添加库的时候,选择 library-fa23
文件夹里的 所有 库 (或者直接导入整个文件夹也行)。
导入的时候,可能需要一个个地选择 .jar
文件 (别直接选整个文件夹)。
运行 main 的时候,出现一堆红字,是不是出错了?
应该没事儿 -- 只要输出显示服务器启动成功,就说明一切正常。
入门
如何测试服务器组件?
最好的办法是稍微改动一下代码,启动服务器,然后看看在网页上点按钮会发生什么。如果生成字符串的时候遇到问题,可以试试在你的 “handle” 方法里打印出来看看。
如果在 plus 和 divide 中缺少一年,我应该如何处理?
对于 plus
,直接用第一年的数据就好 (相当于加 0)。 对于 divide
,直接忽略那一年 (输出里不要包含它)。
我的 NGramMap 里面的方法都写得太长了,debug 起来很困难,怎么办?
根据实验要求,这个类的大部分工作应该在构造函数里完成。这意味着你的主要任务是在构造函数里解析数据文件,把它们整理成易于后续操作的形式,这样就能更轻松地实现其他方法。这个类应该会让你想起hw2的PercolationStats
。构造函数做了很多工作,相比之下,这些方法相对简单。
另外,别忘了善用抽象。还记得你为TimeSeries
写的plus
和divide
方法吗?也许它们在这里能派上用场。如果你发现自己在遍历TimeSeries
里的数据,不妨想想有没有更简单的办法。
常见异常
为什么在将字符串解析为整数时会收到NumberFormatException
?
由于其底层的位表示,整数在Java中只能这么大/小(你将在61C中了解更多关于这方面的内容!)如果你的字符串表示的数字超出了有效的整数范围,则会抛出NumberFormatException
。如果你预计存储大量数字,最好使用Double
代替,它可以存储更广泛的值。
手动运行AG测试,结果和AG给出的不一样/不符合预期,这是怎么回事?
这可能与边缘情况有关。数据集可能不匹配,因此AG的期望和本地结果可能不匹配。
为什么我得到randomizedTest超时错误,而一切看起来都正确?
检查你的plus
和divideBy
方法。看看你是不是有嵌套循环。不一定非得写两个for语句才算嵌套循环。想想你是怎么拿到years
的(用的哪个方法),再看看你是不是在获取years
的方法之上又调用了其他方法来get
特定年份。
其他一些可能的错误和提醒:
- 记住,handler方法本身不复杂,主要逻辑都在
NGramMap
里。 - 还有,记得在
NGramMap
里调用正确的方法。 - 如果handler方法有问题,先检查一下格式!
- 超时也可能与多次调用
weightHistory
有关,这是一个昂贵的操作。你可以利用weightHistory(word, startYear, endYear)
。
Gradescope 提示 '提交在 [TEST NAME] 测试中失败,可能由于内存超限'。
这可能是 Gradescope 后台故障导致的。如果遇到此问题,请在 Ed 上发帖。
本地测试失败,但 Gradescope 上却通过
这可能与你读取文件时 while 循环的实现方式有关。建议使用 isEmpty()
替代 hasNextLine()
进行判断。