常见问题 - 项目 2A
课程工作人员会在你们问问题时不断更新这个页面!如果你有一个在这里没有回答的问题,在实验课、答疑时间或 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 中的所有方法都变得很长,很难调试,我该怎么办?
根据说明,这个类中的大部分工作应该在构造函数中完成。这意味着你在构造函数中的工作是解析数据文件,并将它们整理成一个良好的形式,这样完成所有其他方法就会很容易。这个类应该让你想起 hw2 中的
PercolationStats
。构造函数做了很多工作,相比之下方法就相对简单了。
另外,别忘了利用抽象。还记得你为
TimeSeries
编写的
plus
和
divide
方法吗?你可能会在这里发现它们的用处。如果你发现自己在遍历
TimeSeries
的条目,问问自己是否有更简单的方法。
常见异常
为什么我在将字符串解析为 int 时会收到
NumberFormatException
?
在 Java 中,由于其底层的位表示,整数只能那么大/小(你会在 61C 中学到更多相关内容!)如果你的字符串表示的数字超出了有效整数范围,就会抛出
NumberFormatException
。如果你预计要存储大数字,最好改用
Double
,它可以存储更大范围的值。
手动复制 AG 测试得到的结果/预期与 AG 给出的不一样,问题出在哪里?
这可能与边缘情况有关。数据集可能不匹配,所以 AG 的预期结果和本地结果可能不一致。
为什么一切看起来都正常,但我却收到 randomizedTest 超时错误?
检查你的
plus
和
divideBy
方法。看看你是否有嵌套的 for 循环。你不需要有 2 个 for 语句才算有嵌套 for 循环。想想你是如何获取
years
的(使用哪个方法),看看你是否在那个方法之上调用了任何方法来
get
特定的年份。
其他一些可能的错误和提醒:
-
请记住,handler 方法中没有复杂度。复杂度取决于
NGramMap。还要记得在你的NGramMap上使用正确的方法。 - 如果你在 handler 方法中看到问题,检查格式!
-
超时也可能与多次调用
weightHistory有关,这是一个昂贵的操作。你可以利用weightHistory(word, startYear, endYear)。
在 Gradescope 中收到"你的提交未能在测试套件 [TEST NAME] 上完成。你很可能使用了太多内存"。
这可能与 Gradescope 后端的故障有关。如果发生这种情况,请在 Ed 上发帖。
本地失败,Gradescope 通过
这可能与你读取文件时实现 while 循环的方式有关。考虑使用
是Empty()
而不是
hasNextLine()
来进行检查。