我已经创建了一个可以继承以使用LinkedLists创建堆栈和队列的类,我已经通过了所有JUnit测试,除了等于一个,我仍然不知道它为什么没有#&# 39;工作。
@Override public boolean equals(Object o) {
if( o == null) return false;
if(o == this) return true;
if(!(o instanceof PushPop)) return false;
PushPop test1= this;
PushPop test = (PushPop)o;
while(!test.isEmpty() && !test1.isEmpty()){
if(test1.pop() != test.pop()) return false;
}
return true;
}
测试在比较值时发出断言错误,特别是当堆栈/队列的额外值超过第二个值时。
答案 0 :(得分:0)
好的,我找到了你的问题:
在您的测试中,您执行以下[取自评论]
stack.push(i);
Assert.assertFalse(stack.equals(stack2));
stack2.push(i);
Assert.assertTrue(stack.equals(stack2));
这似乎是合理的。但是,equals
会清除这两个堆栈,因此当您push
i
转到stack2
时,它不再等于现在为空的stack
。
因此你的错误。
解决方案:不要在equals
方法中修改对象。
我建议克隆或比较您的基础数据结构(例如,如果您使用的是节点,Node
实施equals
)。