常见问题 - 项目 1B:数组双端队列 61B
我确定我写了覆盖率测试,但在评分系统上没有获得那些标志!
有可能当我们使用教学团队版本的代码运行你的测试时,会遇到断言错误。请确保你所有的断言语句都有正确的预期输出!例如,如果你在一个包含元素 1、2、3 的 ArrayDeque61B 上调用 get(0),并断言第 0 个元素应该是 2,那么在这个错误测试之后编写的任何测试都不会计入测试覆盖率。
当我在ArrayDeque61B上调用.get(0)时,我返回items[0],但没有返回我期望的内容。这是为什么?
请记住,Deque的前端元素不一定在位置0。例如,在提供项目1建议方法的幻灯片中,我随意选择了位置4作为Deque前端开始的位置。
我收到"必修 Type 是 双端队列 but provided 是 …"错误
有两个可能的问题。请确保你没有意外导入java.util.*(或java.util.LinkedList或java.util.ArrayList)。另一个可能的问题是你的类签名有问题。
我在Gradescope上一直看到"Cannot invoke java.lang.Integer.intValue() because the return value of ___ 是 null"错误。
这个NullPointerException很可能是由你的addFirst或addLast方法引起的。为了在LinkedListDeque61B上测试这个问题,我们给你提供了一个名为
bigLLDeque61BTest()
的测试,它执行1,000,000次addLast操作,然后执行500,000次removeFirst和500,000次removeLast。要找到这个bug的原因,尝试复制这个测试并执行1,000,000次addFirst操作,也可以复制整个测试并编写一个测试ArrayDeque61B的相同版本。
我收到API错误,要求我删除或使我的是Empty()方法成为私有方法。
目前我们的评分系统无法识别ArrayDeque61B或LinkedListDeque61B中的是Empty实现。请按照规格说明在Deque61B.java文件中提供一个默认实现。
我无法让Java创建泛型对象数组!
使用这种特殊的语法,即
T[] a = (T[]) new Object[1000];
。这里,
T
是一个泛型类型,它是其他 Object 类型(如 "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) 幻灯片)。请记住,让nextLast大于nextFirst是有用的,但你可以选择任何你喜欢的方式来实现!
我在调整大小时遇到 ExecutionTimeoutException。这是怎么回事?
确保你使用乘法因子来调整大小,而不是加法!
我在ArrayDeque61B.java中尝试@Override getRecursive()时收到错误。
你的Deque61B.java接口不应该指定getRecursive()方法(那样做等于说每个实现Deque61B.java的类也应该实现getRecursive(),这是误导性的。)。相反,Deque61B.java不应该包含getRecursive(),并且在LinkedListDeque61B中的实现要省略@Override标签。