Skip to main content

FAQ - Project 1B Array Deque 61B

我明明写了覆盖率测试,但评分器上怎么没显示通过呢?

用官方代码跑测试的时候,可能会遇到断言错误。请确保你的所有断言语句都输出了正确的结果!举个例子,如果你的代码里,对一个包含 1、2、3 的 ArrayDeque61B 调用 get(0),并且错误地断言第 0 个元素应该是 2,那么在这个错误的测试之后的所有测试都不会被计入覆盖率。

当我在我的 ArrayDeque61B 上调用 .get(0) 时,我返回的是 items[0],但没有得到我期望的项目。 发生了什么?

请记住,你的 Deque 的队首元素不一定位于位置 0。比如,在这些幻灯片(项目 1 的建议方法)里,我随便选了位置 4 作为 Deque 队首的起始位置。

我收到“Required Type is Deque but provided is ...”错误

可能存在两个问题。 确保您没有意外导入 java.util.*(或 java.util.LinkedListjava.util.ArrayList)。 另一个可能的问题与您的类签名有关。

我一直看到 Gradescope 上出现“Cannot invoke java.lang.Integer.intValue() because the return value of ___ is null”错误。

NullPointerException 可能是由您的 addFirstaddLast 方法引起的。 为了测试 LinkedListDeque61B,我们 为您提供了一个名为 bigLLDeque61BTest() 的测试,该测试执行 1,000,000 次 addLast 操作,然后执行 500,000 次 removeFirst 和 500,000 次 removeLast。 为了 找到此错误的原因,请尝试复制该测试并执行 1,000,000 次 addFirst 操作,以及复制 整个测试并编写一个相同的版本来测试 ArrayDeque61B

我收到一个 API 错误,要求我删除或使我的 isEmpty() 方法私有。

目前,我们的评分器无法识别 ArrayDeque61BLinkedListDeque61B 中的 isEmpty 实现。 请遵循 规范并在 Deque61B.java 文件中提供默认实现。

我无法让 Java 创建一个泛型对象数组!

使用奇怪的语法,即 T[] a = (T[]) new Object[1000];。 此处,T 是一种泛型类型,它是 其他对象类型(如“String”或“Integer”)的占位符。

我的 get() 方法应该在什么时候返回 null?

如果索引大于 ArrayDeque61B 的大小,而不是底层数组,则应返回 null。 例如,如果您的底层数组的大小为 8,但您的 ArrayDeque61B 仅调用了 add 三次,那么只有 3 个项目,并且超出 2 的任何索引都超出范围

当列表中没有任何内容时,get() 应该返回什么?

返回 null!

如何处理索引中的溢出?

考虑使用模运算符!

我的 toList() 方法应该做什么?

您的 toList 方法应该返回一个列表,其中包含 ArrayDeque61B 中的元素,并按照添加元素的顺序排列(即 Deque 的“概念版本”)。 提示一下,利用 nextFirstnextLast! 另外,请务必仅返回作为元素添加到 Deque 中的值(除非明确添加为元素,否则不要返回 null)

我在构造函数方面遇到问题。 我应该如何处理 nextFirstnextLast

请看这里(cs61b sp23 proj1B (ArrayDeque) 幻灯片)。 请记住,从大于 nextFirstnextLast 开始是有用的,但您可以按照您选择的任何方式来实现它!

我在调整大小时遇到 ExecutionTimeoutException。 发生了什么?

确保您使用乘法因子而不是加法来调整大小!

尝试在 ArrayDeque61B.java@Override getRecursive() 时出现错误。

你的 Deque61B.java 接口里不应该声明 getRecursive() 方法,这意味着所有实现了 Deque61B.java 的类都需要实现 getRecursive() 方法,这会产生误导。更准确地说,Deque61B.java 里面不应该有 getRecursive() 方法,并且移除 LinkedListDeque61B 实现中的 @Override 注解。