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
注解。