我有一个名为removeMin的方法,它接受一个Stack<CalendarDate>作为参数,从堆栈中删除最小值(在本例中是最早的日期)并返回它。然而,我没有得到我预期的价值。我相信我对stacks有足够的了解。这是我的方法。
public static CalendarDate removeMin(Stack<CalendarDate> stack) {
Queue<CalendarDate> aux = new LinkedList<CalendarDate>();
CalendarDate min = stack.peek();
if(stack.size() < 1) {
return null;
}
while (!stack.empty()) {
CalendarDate c = stack.pop();
aux.add(c);
if(c.compareTo(min) == -1) {
min = c;
}
aux.add(c);
}
while (!aux.isEmpty()) {
if (aux.remove().compareTo(min) == 1) {
stack.push(aux.remove());
}
}
while (!stack.empty()) {
aux.add(stack.pop());
}
while (!aux.isEmpty()) {
stack.push(aux.remove());
}
return min;
}下面是我在main方法中的测试代码。
public static void main(String[] args) {
// store some dates so they can be reused
CalendarDate[] store = {new CalendarDate(1,2,10), new CalendarDate(1,1,10), new CalendarDate(12,30,10)};
Stack<CalendarDate> testAll = new Stack<CalendarDate>();
for (CalendarDate i: store) {
testAll.push(i); // build a Stack
}
for (int i = 1;i <= 9;i++) {
testAll.push(new CalendarDate(1,1,10));
}
System.out.println(Chapter14.removeMin(testAll));
}正如您所看到的,我使用1/1/10、1/2/10和12/30/10创建了一个堆栈。在运行removeMin方法后,它应该返回12/30/10,因为它位于1/1/10之前,对吗?好吧,我的输出结果不是这样的,因为我从removeMin得到的结果是1/1/10而不是12/30/10。有人能解释为什么会发生这种情况吗?
发布于 2018-02-16 11:45:44
如果我错了,请纠正我,但是日期似乎是mm/dd/yy格式。如果是这样,那么日期是:2010年1月2日
2010年1月1日
2010年12月30日
紧随其后的是2010年1月1日的9份。
因为1月1日在所有其他日期之前,所以1月1日的一份拷贝应该被删除。要测试这一点,您可以尝试循环removeMin,直到堆栈为空。它应该从删除1月1日的10个副本开始,然后是1月2日,最后是12月30日。
https://stackoverflow.com/questions/48819169
复制相似问题