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.LinkedList 或 java.util.ArrayList)。 另一个可能的问题与您的类签名有关。

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

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

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

目前,我们的评分器无法识别 ArrayDeque61B 或 LinkedListDeque61B 中的 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 的“概念版本”)。 提示一下,利用 nextFirst 和 nextLast! 另外,请务必仅返回作为元素添加到 Deque 中的值(除非明确添加为元素,否则不要返回 null)

我在构造函数方面遇到问题。 我应该如何处理 nextFirst 和 nextLast?​

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

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

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

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

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