跳转到主要内容 链接 搜索 菜单 展开 文档 (外部链接)

常见问题 - 项目 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() 来进行检查。